将Azure数据工厂数据流json转换为SQL

时间:2020-08-06 08:53:38

标签: sql json azure-data-factory dataflow

我有一个带有分层数据的JSON源文件,需要将其沉入两个SQL表(关系)中。 JSON如下所示

{
"orders":[
  {
    "orderid":"30933",
    "ordername":"abc",
    "items":[
      {
        "itemid":1,
        "itemstatus":"Failed"
      },
      {
        "itemid":2,
        "itemstatus":"Failed"
      }
    ]
  },
  {
    "orderid":"308320",
    "ordername":"xyz",
    "items":[
      {
        "itemid":5,
        "itemstatus":"Succeeded"
      }
    ]
  }
]
}

我的SQL持有两个带有OrderID主键和外键的表Order和OrderItem。

现在我有一个Azure数据工厂数据流,其源与上面的JSON一样,我需要将所有关系数据停放在相应的表中。

所以在这里我需要OrderId(30933,308320)和OrderName(abc,xyz)将进入Order表,而各个项目数据进入OrderItem表(从Order表中引用OrderId)。在这种情况下,Order表具有2个,而OrderItem表具有3个条目。

1 个答案:

答案 0 :(得分:1)

我们无法在一个副本中实现这一目标。

我测试过,我们可以在一个管道中使用两个复制活动,它成功了。您可以按照以下步骤进行操作:

  1. 复制活动1:将数据从Orders(订单ID和订单名)复制到表Orders
  2. 复制活动2:将数据从items(itemid和itemstatus)复制到 表OrderItems

注意:

  1. 复制活动1和2使用与源相同的json文件。的 区别在于映射设置。

  2. 复制活动1个接收器是Azure SQL数据库表Orders,复制活动 2个接收器是Azure SQL数据库表OrderItems

为了让您清楚地理解它,我制作了两张GIF图片。

在活动副本1中映射设置: enter image description here

复制活动2中的映射设置: enter image description here

运行管道:

enter image description here

检查表中的数据:

enter image description here

限制是我们只能获取items的第一个元素,而不能同时选择两者的集合引用。

enter image description here

更新:

恭喜您以另一种方式实现了它:使用数据流展平/转置数据,然后将其维护以倒入关系SQL表中。