Azure Data Factory嵌套JSON转SQL表:冗余数据移除方案咨询
解决方案推荐:优先用Azure Data Factory(ADF)原生组件,无需脚本
一、Azure Data Factory 原生实现(最优选择)
既然你已经在使用ADF的Copy Into,直接用ADF的原生配置就能解决,完全不需要额外脚本:
定位到users节点,跳过冗余字段
如果原始JSON结构类似:{ "count": 100, "results": {...}, "meta": {...}, "users": { "user123": {"name": "张三", "email": "zhangsan@xxx.com"}, "user456": {"name": "李四", "email": "lisi@xxx.com"} } }在复制活动的源设置中,使用JSON路径表达式直接提取
users节点:在「查询」栏填写$users,或者开启「筛选行」用$..users定位,这样源数据会自动跳过count、results、meta这些冗余部分。处理UserID作为对象键的映射问题
由于users下是键值对结构(UserID是键,用户数据是值),直接映射会出重复字段错误,用ADF的派生列功能解决:- 添加派生列转换,用
explode(mapToArray(users))把users的键值对拆成数组,每个元素是{"key":"user123", "value":{"name":"张三",...}}的结构 - 再派生两个列:
key作为UserID,value.name、value.email等作为用户属性,这样就把嵌套的键值对转成了扁平的行数据,后续映射就不会有重复问题。
- 添加派生列转换,用
二、SQL端处理(备选方案)
如果ADF的配置觉得繁琐,可以先把原始JSON全量导入SQL临时表,再用SQL原生JSON函数解析:
全量导入临时表
用ADF Copy Into把原始JSON导入SQL的临时表(比如#temp_raw_json),只需要一个nvarchar(max)类型的字段存储整个JSON串。解析并插入目标表
用OPENJSON函数直接提取users节点的键值对,跳过冗余字段:INSERT INTO target_users (user_id, name, email) SELECT j.[key] AS user_id, JSON_VALUE(j.[value], '$.name') AS name, JSON_VALUE(j.[value], '$.email') AS email FROM #temp_raw_json t CROSS APPLY OPENJSON(t.raw_json, '$.users') j这段SQL会自动遍历users下的所有UserID对象,把数据转成符合SQL表结构的行。
三、Azure Function(不推荐,除非有特殊场景)
Azure Function需要写少量代码(支持C#/PowerShell,不用Python),但完全没必要——ADF和SQL都能原生解决问题,用Function反而需要维护代码,增加复杂度。如果一定要用,思路是:触发Function拉取REST API的JSON,提取users节点并拆分红键值对,再插入SQL表。
内容的提问来源于stack exchange,提问作者jklein
相关产品推荐
相关产品推荐

