You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Data Factory嵌套JSON转SQL表:冗余数据移除方案咨询

解决方案推荐:优先用Azure Data Factory(ADF)原生组件,无需脚本

一、Azure Data Factory 原生实现(最优选择)

既然你已经在使用ADF的Copy Into,直接用ADF的原生配置就能解决,完全不需要额外脚本:

  1. 定位到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这些冗余部分。

  2. 处理UserID作为对象键的映射问题
    由于users下是键值对结构(UserID是键,用户数据是值),直接映射会出重复字段错误,用ADF的派生列功能解决:

    • 添加派生列转换,用explode(mapToArray(users))把users的键值对拆成数组,每个元素是{"key":"user123", "value":{"name":"张三",...}}的结构
    • 再派生两个列:key作为UserID,value.name、value.email等作为用户属性,这样就把嵌套的键值对转成了扁平的行数据,后续映射就不会有重复问题。

二、SQL端处理(备选方案)

如果ADF的配置觉得繁琐,可以先把原始JSON全量导入SQL临时表,再用SQL原生JSON函数解析:

  1. 全量导入临时表
    用ADF Copy Into把原始JSON导入SQL的临时表(比如#temp_raw_json),只需要一个nvarchar(max)类型的字段存储整个JSON串。

  2. 解析并插入目标表
    用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:45:40