【问题标题】:azure ADF - Get field list of .csv file from lookup activityazure ADF - 从查找活动中获取 .csv 文件的字段列表
【发布时间】:2020-03-10 18:43:04
【问题描述】:

上下文:azure - ADF 简要流程说明:

获取在 .csv(blobed) 文件的第一行中定义的字段列表。这是第一步,检测字段

那么第二步就是与 SQL 表的实际列进行比较

第三个执行存储过程来完成alter table任务,完成一个(自定义)表,其中包含成功将.csv文件加载到SQl表中所需的所有字段。

为了开始我的 ADF 管道,我设置了一个查找活动,它“查询”我的 blobed 文件的第一行 "First row only" flag = ON。作为第二个管道活动,一个“附加变量”任务,我想在那里获得从查找活动中检索到的所有 .csv 字段(第一行),作为列表。

这是一场噩梦。

据我所知,通过动态内容,我可以获得一个包含所有值的数组(带有{"field1_name":"field1_value_1st_row", "field2_name":"field2_value_1st_row", etc } 之类的格式) 像@activity('Lookup1').output.firstrow 这样的东西。 或任何带有@activity('Lookup1').output.firstrow.<element_name> 的数组元素, 但我不知道如何获取数组的所有字段名称(键?)的列表。

我将不胜感激任何建议,非常感谢!

【问题讨论】:

  • 您好 Jay,首先,非常感谢您花时间阅读并努力理解此帮助请求。您的回复对于了解正确的方式非常有用。因此,如果您的建议是进行 azure 函数活动,我认为 ADF 没有机会在本地为我做任何事情,(当我最初写这个问题时,这是我的疑问之一。)记住你的建议,我添加了一个 python 函数活动,使用查找活动输出。现在我正在努力正确构建函数必须返回到 ADF 的 JObject。

标签: csv azure-data-factory


【解决方案1】:

我会保存 LookUp Activity 的部分,因为您似乎对它很熟悉。

您可以使用 Azure Function HttpTrigger 来获取 firstrow JSON 对象的键列表。例如,您在问题中提到的这样的 json 对象:

{"field1_name":"field1_value_1st_row", "field2_name":"field2_value_1st_row"}

Azure 函数代码:

module.exports = async function (context, req) {
    context.log('JavaScript HTTP trigger function processed a request.');
    var array = [];
    for(var key in req.body){
        array.push(key);       
    }
    context.res = {
        body: {"keyValue":array}
    };
};

测试输出:

然后使用Azure Function Activity得到输出:

@activity('<AzureFunctionActivityName>').keyValue

使用Foreach Activity循环keyValue数组:

@item()

还是基于上面的示例输入数据,请参考我的示例代码:

dct = {"field1_name": "field1_value_1st_row", "field2_name": "field2_value_1st_row"}
list = []
for key in dct.keys():
    list.append(key)

print(list)
dicOutput = {"keys": list}
print(dicOutput)

【讨论】:

  • 嗨 Jay,正如我上面提到的,我的 python 活动代码输出一个类似 (field1_name, field2_name, field3_name...) 的列表,ADF 只接受 JObjects(字典列表?'),如 { "items": [{ "name": "adam" }, { "name": "tom" }]关于如何获取该格式的任何建议,从列表(字段名称列表)和常量(键)构建它。我试过 dict, ObjDict 没有结果。再次感谢。
  • 嗨 Jay,我正在尝试自己的代码,我想我发现了 ADF JObjects 失败错误的所有方式。然后你的代码,简直太棒了! OK 退出,在 ADF 端收到 .csv 字段列表,所以我又回到了管道中。这真的是一个里程碑! .现在构建管道的其余部分。我没有话要感谢你。
  • @manuk 你真是太好了……好吧,如果你不介意,请你接受这个答案(答案旁边的钩子),这有利于论坛上其他人的参考?谢谢。
【解决方案2】:

您是否考虑过在 ADF 数据流中这样做?您可以将传入字段映射到没有目标架构的 SQL 数据集。在数据集定义中定义新表名,然后将 CSV 中的传入字段映射到新的目标表架构定义。 ADF 将使用该文件的架构将行写入新表。

【讨论】:

  • 嗨,马克,非常感谢您的评论。这是一个非常好的建议,但我想尽可能地减少预算,我知道 ADF 数据流意味着一些额外的成本。另一方面,如果我得到您的建议,此 ADF 管道将加载 lots(数百个 p/天)的(blobbed).csv 文件,其列结构(可能)有一些变化(正确) ,我将以 new table 每个 .csv 文件 load-iteration 结束。由于与异构表结构。每个 .csv 文件都必须加载到唯一的表中。
  • 这是您的选择。您可以要求 ADF 为每个 CSV 生成一个新表,也可以加载到预先存在的表中。
猜你喜欢
  • 1970-01-01
  • 2023-01-12
  • 2021-07-24
  • 2019-03-10
  • 2022-09-02
  • 2021-08-12
  • 2012-09-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多