如何在ADF中将特定结构JSON文件加载到Azure SQL表?
Azure Data Factory 处理嵌套JSON到SQL表的解决方案
步骤1:配置JSON源数据集
- 在数据流中添加源组件,选择你的JSON文件。在JSON设置里,将
文档形式设为单文档,确保能完整读取整个JSON结构。
步骤2:拆分分支分别处理Status和TimePeriod
添加分支转换,将数据流拆为两个独立分支,分别处理Status和TimePeriod的键值对:
处理Status分支
- 添加逆透视转换:
- 选中
Status下的所有子列(0、1、2)作为要取消透视的列 - 设置
逆透视键列名为Status_Code,逆透视值列名为Status_Name - 处理后会生成3行数据,每行对应一组状态编码与状态名称
- 选中
处理TimePeriod分支
- 添加逆透视转换:
- 选中
TimePeriod下的所有子列(Year、Quarter、Month、Week、Day)作为要取消透视的列 - 设置
逆透视键列名为Time_Type,逆透视值列名为Time_Value - 处理后会生成5行数据,每行对应一组时间周期类型与值
- 选中
步骤3:关联两个分支生成完整数据集
因为目标表需要每行同时包含状态与时间周期信息,需将两个分支做笛卡尔积关联:
- 在其中一个分支(比如Status分支)添加查找转换,选择另一个分支(TimePeriod分支)作为查找源,不设置任何关联条件,即可生成所有状态与时间周期的组合数据
步骤4:映射到目标SQL表
- 添加接收器转换,选择你的Azure SQL数据库表
- 在
映射标签中,将数据流中的Status_Code、Status_Name、Time_Type、Time_Value列对应到目标表的对应列即可
替代方案:用派生列+展开转换简化流程
如果不想拆分分支,也可以直接用数组转换+展开的方式:
- 添加派生列,将Status转为结构体数组:
同样处理TimePeriod:array( struct('0' as Status_Code, Status.0 as Status_Name), struct('1' as Status_Code, Status.1 as Status_Name), struct('2' as Status_Code, Status.2 as Status_Name) ) as Status_Arrayarray( struct('Year' as Time_Type, TimePeriod.Year as Time_Value), struct('Quarter' as Time_Type, TimePeriod.Quarter as Time_Value), struct('Month' as Time_Type, TimePeriod.Month as Time_Value), struct('Week' as Time_Type, TimePeriod.Week as Time_Value), struct('Day' as Time_Type, TimePeriod.Day as Time_Value) ) as TimePeriod_Array - 先添加展开转换展开
Status_Array,生成3行数据;再添加一次展开转换展开TimePeriod_Array,生成15行完整组合数据 - 最后映射到目标表即可
内容的提问来源于stack exchange,提问作者glaring
相关产品推荐
相关产品推荐

