Azure Data Factory中如何使用Lookup活动结果在ForEach中迭代
ADF中Lookup结果经ForEach遍历传入子Pipeline的配置方法
配置失效的核心排查&实现步骤
- 第一步:修正Lookup活动的返回行数配置
Lookup活动默认仅返回前50条记录,要获取200条目标列数据,首先打开Lookup活动的设置面板:- 取消勾选*First row only(仅第一行)*选项
- 将*Maximum row count(最大返回行数)*调整为大于等于200的数值(最高支持5000条)
这一步是@activity('Lookup1').output.value能拿到全量数据的前提,默认配置下Lookup会截断结果,直接导致后续遍历异常。
- 第二步:正确配置ForEach活动的遍历项
如果你需要遍历的是Lookup结果中某一指定列,而非整行数据,不要直接在ForEach的Items输入框填写@activity('Lookup1').output.value——这个表达式返回的是所有行的完整对象数组,不是单列值集合。你需要用select方法提取目标列,假设目标列名为targetCol,正确表达式为:
如果需要遍历整行数据,再直接使用@activity('Lookup1').output.value.select(item => item.targetCol)@activity('Lookup1').output.value作为Items值即可。
额外配置说明:若需要按顺序逐行执行,勾选ForEach设置中的Sequential(顺序执行);不需要顺序的话可调整*Batch count(批大小)*控制并发,最高支持50并发。 - 第三步:ForEach内配置子Pipeline传参
在ForEach活动内部添加*Execute Pipeline(执行管道)*活动,选中你需要调用的目标Pipeline:- 提前在目标Pipeline中定义好接收单条遍历值的参数(例如参数名为
singleRowValue) - 在Execute Pipeline的参数赋值栏,给对应参数填
@item()即可传入当前循环到的单列值;如果是遍历整行对象的场景,取指定列值则填@item().targetCol
- 提前在目标Pipeline中定义好接收单条遍历值的参数(例如参数名为
常见配置踩坑提醒
以下问题会直接导致配置失效:
- Lookup活动名拼写错误,活动名包含空格、特殊字符时,必须用单引号包裹活动名,例如
@activity('Lookup 业务数据').output.value- 目标列名拼写和Lookup返回的字段名不匹配,注意字段名大小写敏感
- ForEach活动没有和Lookup活动建立成功依赖(连线),导致Lookup还没返回结果ForEach就开始执行,拿不到输出值
内容的提问来源于stack exchange,提问作者Duccio Borchi
相关产品推荐
相关产品推荐

