有没有一种方法可以在不使用数据流的情况下展平 Azure 数据工厂中的嵌套 JSON?

问题描述 投票:0回答:1

我使用 Azure 数据工厂复制语句来获取 API 的输出作为 JSON 文件,并将数据放入突触数据仓库中。 JSON 的布局与下面添加的 JSON 类似,但“值”字段的长度可以超过 10,000 个字符。我在下面添加了一个表格,其中包含我希望的输出。

我确实有一个限制,那就是我无法使用数据流。我知道这是解决此问题的常用方法,但这不是我专门能够使用的解决方案,这就是为什么我在这里询问任何替代解决方案。

感谢任何和所有帮助。

JSON

{
     "records": [
          {
               "id": 1,
               "name": "name1",
               "values": [
                    {
                    "id":20987,
                    "value": "value1"
                    },
                    {
                    "id":94756,
                    "value": "value2"
                    },
                    {
                    "id":63009,
                    "value": "value3"
                    }
               ]
          },
          {
               "id": 2,
               "name": "name2",
               "values": [
                    {
                    "id":227272727272,
                    "value": "value7",
                    "user": "Greg"
                    },
                    {
                    "id":456787654664,
                    "value": "value8", 
                    "user": "Tony"
                    },
                    {
                    "id":283749467394,
                    "value": "value9", 
                    "user": "Maria"
                    }
               ]
          }
     ]
}

SQL

id 名字 值.id 值.值 值.用户
1 姓名1 20987 值1
1 姓名1 94756 值2
1 姓名1 63009 值3
2 名称2 227272727272 值7 格雷格
2 名称2 456787654664 值8 托尼
2 名称2 283749467394 值9 玛丽亚
sql json azure-data-factory
1个回答
0
投票

为了在不使用数据流的情况下压平Json,您可以使用SQL查询脚本。下面是方法。

  • 进行查找活动并获取该活动中的 Json 数据集。

  • 获取复制活动并将其与查找活动按顺序连接。在源代码中,给出以下查询。

DECLARE @json NVARCHAR(max) = N'@{activity('Lookup1').output.value[0].records}';
SELECT
   r.id,r.name,v.id AS [values.id],
    v.value AS [values.value]
FROM
    OPENJSON(@json) WITH (
        id INT,
        name VARCHAR(50),
   [values] NVARCHAR(MAX) AS JSON
  
    ) AS r
 CROSS APPLY OPENJSON(r.[values]) WITH (
        id VARchar(100),
        value VARCHAR(50)
    ) AS v;
  • 在接收器中,将azure sql表作为接收器数据集。

这将确保 Json 被展平并复制到 SQL 表。 注意:您的数据没有关系数据。 id=1 时缺少

user
字段;这里我们只能把关系数据扁平化。确保所有行项目的数据结构相同。

© www.soinside.com 2019 - 2024. All rights reserved.