在Azure Data Factory中循环批量导入无列名CSV至Azure SQL不同表
批量将Blob Storage中无列名CSV文件导入Azure SQL对应表
我在Blob Storage里有多个无列名的CSV文件,已经用Get Metadata Activity获取到了所有文件列表。现在需要通过循环调用Copy Data Activity,把这些文件分别导入Azure SQL中结构匹配的不同表。单个文件的导入已经实现,现在要完成批量循环处理。
示例文件
sample1.txt
5|1|300|100| |101|809|4|4|4|0|0|0|0|0|0|0|0|2|0|0|0|0|-4|0|0||2020-07-06 5|1|300|100| |102|809|6|5|5|0|0|0|0|0|0|0|0|2|0|0|0|0|-5|0|0||2020-07-14 5|1|300|100| |103|809|-1|-1|-1|0|0|0|0|0|0|0|0|2|0|0|0|0|1|0|0||2020-07-05 5|1|300|100| |104|809|7|7|7|0|0|0|0|0|0|0|0|2|0|0|0|0|-7|0|0||2020-07-05 5|1|300|100| |105|809|-5|-5|-5|0|0|0|0|0|0|0|0|2|0|0|0|0|5|0|0||2021-08-18 5|1|300|100| |106|809|0|0|0|0|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||2020-07-05 5|1|300|100| |107|809|8|8|8|0|0|0|0|0|0|0|0|2|0|0|0|0|-8|0|0||2020-07-14 5|1|300|100| |108|809|0|0|0|0|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||2020-07-08 5|1|300|100| |109|809|2|2|2|0|0|0|0|0|0|0|0|2|0|0|0|0|-2|0|0||2020-07-14 5|1|300|100| |111|809|2|2|2|0|0|0|0|0|0|0|0|2|0|0|0|0|-2|0|0||2020-07-07 5|1|300|100| |112|809|4|4|4|0|0|0|0|0|0|0|0|2|0|0|0|0|-4|0|0||2020-07-05 5|1|300|100| |114|809|3|3|3|0|0|0|0|0|0|0|0|2|0|0|0|0|-3|0|0||2020-07-08
sample2.txt
5|1|300|100| |131|809|0|0|0|0|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||2020-07-06 5|1|300|100| |132|809|7|7|7|0|0|0|0|0|0|0|0|2|0|0|0|0|-7|0|0||2020-07-08 5|1|300|100| |135|809|0|0|0|0|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||2020-07-05 5|1|300|100| |136|809|2|2|2|0|0|0|0|0|0|0|0|2|0|0|0|0|-2|0|0||2020-07-08 5|1|300|100| |138|809|5|5|5|0|0|0|0|0|0|0|0|2|0|0|0|0|-5|0|0||2020-07-08 5|1|300|100| |139|809|3|3|3|0|0|0|0|0|0|0|0|2|0|0|0|0|-3|0|0||2020-07-07 5|1|300|100| |140|809|0|0|0|0|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||2020-07-06 5|1|300|100| |142|809|0|0|0|0|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||2020-07-08 5|1|300|100| |143|809|3|3|3|0|0|0|0|0|0|0|0|2|0|0|0|0|-3|0|0||2020-07-14 5|1|300|100| |146|809|0|0|0|0|0|0|0|0|0|0|0|2|0|0|0|0|0|0|0||2020-07-05
批量循环处理实现步骤
1. 配置Get Metadata Activity输出
确保Get Metadata Activity的Field List勾选childItems,这样能获取Blob容器内所有文件的完整信息(含文件名、路径等)。
2. 添加ForEach Activity循环组件
将Get Metadata的输出作为ForEach的遍历源,在ForEach的Items属性中输入动态表达式:
@activity('Get Metadata').output.childItems
这会自动遍历所有获取到的文件。
3. 在ForEach内部配置Copy Data Activity
源数据集设置:
编辑Blob Storage源数据集,把文件名设为动态内容,引用当前循环的文件名:@item().name同时在数据集连接配置里,指定分隔符为
|,并将第一行作为标题设为否(因为文件无列名)。目标数据集设置:
编辑Azure SQL目标数据集,把表名设为动态内容,根据文件名匹配对应SQL表。比如文件名是sample1.txt对应表sample1,可用表达式提取文件名并去掉后缀:@replace(item().name, '.txt', '')注意:需提前在Azure SQL中创建好结构匹配的表(列数、数据类型要和CSV文件完全对应)。
4. 验证并运行管道
检查所有动态表达式是否正确,确认每个文件都能对应到目标表后,运行管道即可完成批量导入。
内容的提问来源于stack exchange,提问作者sunitha v
相关产品推荐
相关产品推荐

