如何在Azure Data Factory中遍历LOOKUP活动的数据(已用Foreach)
问题场景
我正在使用Azure Data Factory读取指定文件夹下的所有CSV文件,已创建包含对应步骤的管道,相关步骤截图如下:
管道整体步骤

Copy活动配置

我的LOOKUP活动返回的数据如下,希望读取所有数据并通过脚本变量处理:
{ "count": 2, "value": [ { "Prop_0": "ABC", "Prop_1": "DEF", "Prop_2": "XYZ'", "Prop_3": "123456789", "Prop_4": "10/19/1991", "Prop_5": "Male", "Prop_6": "Married", "Prop_7": "City", "Prop_8": "AB", "Prop_9": "6226", "Prop_10": "", "Prop_11": null, "Prop_12": "", "Prop_13": null, "Prop_14": "", "Prop_15": "", "Prop_16": null, "Prop_17": null, "Prop_18": null, "Prop_19": null, "Prop_20": null, "Prop_21": null, "Prop_22": null, "Prop_23": null, "Prop_24": null, "Prop_25": "11/28/2023 07:43 AM", "Prop_26": "11/27/2023 02:20 PM", "Prop_27": "12/01/2023 02:37 PM" }, { "Prop_0": "PQR", "Prop_1": "DEF", "Prop_2": "XYZ'", "Prop_3": "234567890", "Prop_4": "10/19/1991", "Prop_5": "Male", "Prop_6": "Married", "Prop_7": "City", "Prop_8": "AB", "Prop_9": "6226", "Prop_10": "", "Prop_11": null, "Prop_12": "", "Prop_13": null, "Prop_14": "", "Prop_15": "", "Prop_16": null, "Prop_17": null, "Prop_18": null, "Prop_19": null, "Prop_20": null, "Prop_21": null, "Prop_22": null, "Prop_23": null, "Prop_24": null, "Prop_25": "11/28/2023 07:43 AM", "Prop_26": "11/27/2023 02:20 PM", "Prop_27": "12/01/2023 02:37 PM" } ] }
我希望根据count值读取各Prop字段并处理,但因已使用Foreach活动无法再次使用,恳请指导如何读取并处理这些数据。
解决方案
1. 直接通过ADF表达式访问指定数据
无需额外迭代活动,直接用表达式提取LOOKUP返回结果中的内容:
- 获取count值:
@activity('你的LOOKUP活动名称').output.count - 获取指定索引对象的Prop字段:
@activity('你的LOOKUP活动名称').output.value[0].Prop_0(0为第一个对象的索引,可替换为其他数字) - 若需批量遍历所有对象,结合
range()函数生成索引序列:
将此表达式用于变量或Set Variable活动,配合@range(0, activity('你的LOOKUP活动名称').output.count)@activity('你的LOOKUP活动名称').output.value[item()].Prop_X动态提取对应字段。
2. 使用Execute Script活动批量处理
如果需要复杂逻辑处理,添加Execute Script活动,选择Azure SQL Database或Azure Functions作为运行环境,将LOOKUP输出作为参数传入后批量处理:
- 在活动参数中传入LOOKUP结果:
@activity('你的LOOKUP活动名称').output.value - 以SQL脚本为例,用
OPENJSON解析数组并处理:DECLARE @json NVARCHAR(MAX) = ? SELECT Prop_0, Prop_1, Prop_3, CONVERT(DATE, Prop_4, 101) AS Prop_4 -- 按需添加其他*Prop*字段及处理逻辑 FROM OPENJSON(@json) WITH ( Prop_0 VARCHAR(50), Prop_1 VARCHAR(50), Prop_3 VARCHAR(50), Prop_4 VARCHAR(20) )
3. 嵌套Foreach活动(场景允许时)
ADF支持Foreach活动嵌套,只要内外层迭代对象不冲突即可。若之前的Foreach用于处理文件,内层可专门遍历LOOKUP返回的value数组:
- 内层Foreach的迭代项设置为:
@activity('你的LOOKUP活动名称').output.value - 在Foreach内部添加Set Variable或其他处理活动,用
@item().Prop_X访问当前对象的对应字段。
内容的提问来源于stack exchange,提问作者Developer
相关产品推荐
相关产品推荐

