如何在Azure Data Factory后续Lookup活动中使用前序Lookup的输出结果?
问题根因
你直接将ADF的动态表达式@activity()写在了Lookup活动的静态SQL输入框中,ADF不会对静态SQL内的表达式做解析,会将整条文本作为SQL语句直接发送到目标数据库执行,数据库侧无法识别ADF专属的@activity变量,因此抛出「必须声明标量变量@activity」的报错。
解决方法
你需要将整个SQL语句配置为ADF动态表达式,通过字符串拼接把Fetch Customers活动的输出值嵌入到SQL语句中:
- 打开「Update Min Sales」Lookup活动的SQL输入框,点击输入框右侧的动态内容按钮(小闪电图标),进入动态表达式编辑页。
- 输入如下拼接后的动态表达式:
@concat( 'Update Sales_Min_Sales ', 'SET Row_Count = ', activity('Fetch Customers').output.firstRow.Row_count, ', ', 'Min_Sales = ', activity('Fetch Customers').output.firstRow.Min_Sales, ' Select 1' )
- 如果你要做简化测试,对应的动态表达式写法如下:
@concat('Select ', activity('Fetch Customers').output.firstRow.Row_count)
注意事项
- 确保「Fetch Customers」Lookup活动的仅返回第一行配置项为开启状态,聚合查询仅返回单行结果时,使用
firstRow属性即可直接获取返回字段值;如果关闭了该选项,需要替换为activity('Fetch Customers').output.value[0].Row_count获取第一行的字段值。 - 注意动态表达式中引用的活动名要和实际配置的活动名完全匹配,你测试用的简化语句中多写了一个
Fetch,写为了Fetch Fetch Customers,会触发找不到活动的报错,需要修正。 - 如果要嵌入的字段值为字符串类型,需要在表达式中用单引号包裹,注意ADF动态表达式中单引号需要用两个单引号转义,示例:
@concat('Update table Set StrField = ''', activity('活动名').output.firstRow.StrField, '''')
内容的提问来源于stack exchange,提问作者Kenny_I
相关产品推荐
相关产品推荐

