如何通过ADF复制活动将JSON对象键映射到Azure SQL列
解决Azure Data Factory复制活动无法映射JSON外层键的问题
针对你遇到的API返回JSON外层动态键无法映射到SQL列的问题,最直接的解决方案是使用ADF的数据流动(Data Flow)转换JSON结构,将外层键提取为独立列后再写入SQL表。具体步骤如下:
1. 创建数据流动并配置源数据集
- 新建数据流动,添加源数据集:选择你的API作为数据源,JSON格式设置保持默认的"Single document"即可(适配API返回的单个JSON对象)。
- 在源的「投影」设置中,保留根对象的默认投影(即读取整个JSON对象)。
2. 派生列转换:将外层键值对转为数组
添加派生列转换,创建新列(比如命名为key_value_array),使用ADF表达式将根对象转换为包含键值对的数组:
mapKeysValues($)
该表达式会把原JSON转换为如下结构的数组:
[ {"key": "fdgdhgfh", "value": {"so2_production": "7hjhgj953", ...}}, {"key": "9fsdsfb", "value": {"so2_production": "asdasd", ...}} ]
3. 展开转换:将数组拆分为多行
添加**展开(Flatten)**转换,选择key_value_array作为「展开的数组列」,展开后数组中的每个元素会转为单独一行,每行包含key(原外层键)和value(原内层属性对象)两个列。
4. 提取内层属性字段
两种方式提取value中的属性:
- 方式一:二次展开转换:选择
value列作为「展开的结构列」,直接将so2_production、battery_charge等内层属性拆分为独立列。 - 方式二:派生列转换:逐个创建新列,例如
so2_production = value.so2_production、battery_charge = value.battery_charge,以此类推。
5. 配置接收器数据集并映射列
添加接收器数据集:选择你的Azure SQL表,在「映射」设置中,将key列映射到SQL表存储外层键的列(比如device_id),其他提取出的属性列对应映射到SQL的目标列。
6. 管道中执行数据流动
回到ADF管道,添加执行数据流动活动,选择创建好的数据流动,运行管道即可得到预期的SQL表结果:
| device_id | so2_production | battery_charge | battery_discharge | critical_load_energy |
|---|---|---|---|---|
| fdgdhgfh | 7hjhgj953 | jkjlkj | kjlklj | 4ljljh4 |
| 9fsdsfb | asdasd | sdaasf | ewewrwer | bmvkbjk |
内容的提问来源于stack exchange,提问作者Subha
相关产品推荐
相关产品推荐

