如何在Azure Synapse中用ForEach活动遍历SQL参数表?
在Azure Synapse中将专用SQL池参数表数据转为数组用于ForEach活动
核心思路
把专用SQL池参数表的查询结果,通过表达式转换为你之前使用的JSON数组格式,直接喂给ForEach活动循环处理。
具体实现步骤
获取参数表数据
- 使用Lookup活动(推荐,语法更简洁):
- 连接选择你的专用SQL池
- 查询语句写
SELECT source_table, destination_file, source_system, loadtype FROM parameters - 执行后,活动输出的
output.value就是包含所有行数据的数组,每个元素是键值对形式的行对象。
或者用Execute SQL活动调用
get_parameters存储过程:- 连接选择专用SQL池,活动类型选
Stored procedure,指定存储过程名称get_parameters - 执行后,数据在
output.resultSets[0].rows中。
- 使用Lookup活动(推荐,语法更简洁):
转换为目标JSON数组格式
在ForEach活动的Items属性中,使用表达式将每行数据转换为你需要的结构:- 如果用Lookup活动:
@map(activity('Lookup Parameters').output.value, (row) => createObject( 'source', createObject('table', row.source_table), 'destination', createObject('filename', row.destination_file), 'source_system', row.source_system, 'loadtype', row.loadtype )) - 如果用Execute SQL活动:
@map(activity('Execute SQL Get Parameters').output.resultSets[0].rows, (row) => createObject( 'source', createObject('table', row.source_table), 'destination', createObject('filename', row.destination_file), 'source_system', row.source_system, 'loadtype', row.loadtype ))
这里用
createObject函数构建JSON对象,比字符串拼接更可靠,避免引号转义问题。- 如果用Lookup活动:
复用原有逻辑
现在ForEach活动的循环项就是和之前管道参数完全一致的JSON对象,直接用item()传递参数给子管道即可,原有switch、条件判断等逻辑不需要修改。
验证方法
可以在管道调试时,查看ForEach活动的输入,确认数组结构和之前的参数格式一致,比如:
[{"source":{"table":"Address"},"destination":{"filename":"Address.parquet"},"source_system":"SQL","loadtype":"full"}]
内容的提问来源于stack exchange,提问作者Mons
相关产品推荐
相关产品推荐

