使用 ADF 转换复杂 json 文件

Transform complex json files using ADF

我想使用 Azure 数据工厂数据流将多个复杂 JSON 文件转换为一个复杂 JSON 文件。

多重复杂输入 JSON 文件的格式如下:

{
  "creationDate": "2022-01-19T17:00:17Z",
  "count": 2,
  "data": [
    {
      "id": "",
      "name": "Project A",
      "url": "",
      "state": "Open",
      "revision": 1,
      "visibility": "private",
      "lastUpdateTime": "2019-09-23T08:44:45.103Z"
    },
    {
      "id": "",
      "name": "Project B",
      "url": "",
      "state": "Done",
      "revision": 1,
      "visibility": "private",
      "lastUpdateTime": "2019-12-31T09:38:49.16Z"
    }
  ]
}

我们想将这些文件转换为一个 json 格式的文件:

[
  {
    "date": "2022-01-14",
    "count": 2,
    "projects": [
      {
        "name": "Project A",
        "state": "",
        "lastUpdateTime": ""
      },
      {
        "name": "Project B",
        "state": "",
        "lastUpdateTime": ""
      }
    ]
  },
  {
    "date": "2022-01-17",
    "count": 3,
    "projects": [
      {
        "name": "Project A",
        "state": "",
        "lastUpdateTime": ""
      },
      {
        "name": "Project B",
        "state": "",
        "lastUpdateTime": ""
      },
      {
        "name": "Project C",
        "state": "",
        "lastUpdateTime": ""
      }
    ]
  }
]

我们使用派生列和表达式 @(name=data.name, state=data.state)

有人可以帮助我们如何做到这一点吗?我们尝试了很多东西,比如派生列,先扁平化但是我们不能随心所欲...

谢谢!

最终的解决方案与我们的解决方案非常接近。

所以我们最终的解决方案如下:

  1. 第一个 flattenUnroll by 设置为 data。我们还将 creationDate 映射到 date.
  2. 创建一个名为 projectsderived column 作为表达式 @(name=name,state=state,lastUpdateTime=lastUpdateTime,url=url)
  3. Group activity date Group by。在 first(count) 上为 count 设置 Aggregates 并且(这是解决方案)将 projects 设置为 collect(projects).
  4. Select activity 这将 select 列 datecountprojects.
  5. Sort activity 按 date 升序排序。
  6. 下沉 file name optionoutput to single file 并且 partion option 设置为 single partion

注: 因为我们有一个大 json 文件的接收器(输出到单个文件)。排序不正确写入 json。如果我们调试(数据预览)数据流,一切都是正确的。奇怪的行为。当我们将 Sort activity 选项 Partion option 更改为 Single partion 时,json 文件具有正确的排序顺序。