Azure Data Factory中动态提取Databricks活动runOutput嵌套值的实现方案
Azure Data Factory 动态提取Databricks runOutput键值为数组方案
场景一:直接用ADF表达式+ForEach活动实现(推荐)
核心利用ADF的keys()(获取对象所有键)和values()(获取对象所有值组成数组)函数,无需嵌套循环:
创建变量:在管道中新建一个Object类型的变量,命名为
finalResult,用于存储最终的键-数组映射。配置外层ForEach活动:
- 设置ForEach的
Items表达式为:
该表达式会返回runOutput下所有键的数组(如@keys(activity('landing to raw mailing').output.runOutput)["index","t0","t1","name","CA",...]),实现循环10个键的需求。 - (可选)勾选
Sequential选项,避免变量并发更新冲突。
- 设置ForEach的
在ForEach内部添加Set Variable活动:
- 目标变量选择
finalResult,设置表达式为:
解释:@union(variables('finalResult'), createObject(item(), values(activity('landing to raw mailing').output.runOutput[item()])))item()表示当前循环的键(如"CA")values(...)直接将该键下的对象值转为数组createObject(...)生成当前键与对应数组的键值对union(...)将新的键值对合并到finalResult变量中
- 目标变量选择
执行完成后,finalResult变量中就会存储所有键对应的数组,比如{"CA":[6710065.65,257580.69,171109.65], ...}。
场景二:存储JSON文件后解析提取
如果需要持久化runOutput数据,可采用此方案:
将runOutput写入JSON文件:
- 添加Copy Data活动:
- 数据源选择Azure Data Factory → Pipeline Expression,设置源表达式为:
@string(activity('landing to raw mailing').output.runOutput) - 数据目标选择存储服务(如ADLS Gen2),创建JSON格式的数据集,指定存储路径和文件名。
- 数据源选择Azure Data Factory → Pipeline Expression,设置源表达式为:
- 添加Copy Data活动:
读取并解析JSON文件:
- 添加Lookup活动,读取刚才生成的JSON文件,确保
First row only设为True(因为整个runOutput是单个JSON对象)。 - 后续逻辑同场景一:
- 创建
finalResult变量 - 配置ForEach活动,
Items设为@keys(activity('Lookup_RunOutput').output.firstRow) - 内部用Set Variable活动,表达式为:
@union(variables('finalResult'), createObject(item(), values(activity('Lookup_RunOutput').output.firstRow[item()])))
- 创建
- 添加Lookup活动,读取刚才生成的JSON文件,确保
关键表达式说明
keys(object):返回对象所有属性名的数组values(object):返回对象所有属性值的数组createObject(key, value):生成单个键值对的对象union(object1, object2):合并两个对象的键值对
内容的提问来源于stack exchange,提问作者ayoub mlaouah
相关产品推荐
相关产品推荐

