使用 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)
。
有人可以帮助我们如何做到这一点吗?我们尝试了很多东西,比如派生列,先扁平化但是我们不能随心所欲...
谢谢!
最终的解决方案与我们的解决方案非常接近。
所以我们最终的解决方案如下:
- 第一个
flatten
,Unroll by
设置为 data
。我们还将 creationDate
映射到 date
.
- 创建一个名为
projects
的 derived column
作为表达式 @(name=name,state=state,lastUpdateTime=lastUpdateTime,url=url)
Group
activity date
Group by
。在 first(count)
上为 count
设置 Aggregates
并且(这是解决方案)将 projects
设置为 collect(projects)
.
Select
activity 这将 select 列 date
、count
和 projects
.
Sort
activity 按 date
升序排序。
- 下沉
file name option
到 output to single file
并且 partion option
设置为 single partion
注:
因为我们有一个大 json 文件的接收器(输出到单个文件)。排序不正确写入 json。如果我们调试(数据预览)数据流,一切都是正确的。奇怪的行为。当我们将 Sort
activity 选项 Partion option
更改为 Single partion
时,json 文件具有正确的排序顺序。
我想使用 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)
。
有人可以帮助我们如何做到这一点吗?我们尝试了很多东西,比如派生列,先扁平化但是我们不能随心所欲...
谢谢!
最终的解决方案与我们的解决方案非常接近。
所以我们最终的解决方案如下:
- 第一个
flatten
,Unroll by
设置为data
。我们还将creationDate
映射到date
. - 创建一个名为
projects
的derived column
作为表达式@(name=name,state=state,lastUpdateTime=lastUpdateTime,url=url)
Group
activitydate
Group by
。在first(count)
上为count
设置Aggregates
并且(这是解决方案)将projects
设置为collect(projects)
.Select
activity 这将 select 列date
、count
和projects
.Sort
activity 按date
升序排序。- 下沉
file name option
到output to single file
并且partion option
设置为single partion
注:
因为我们有一个大 json 文件的接收器(输出到单个文件)。排序不正确写入 json。如果我们调试(数据预览)数据流,一切都是正确的。奇怪的行为。当我们将 Sort
activity 选项 Partion option
更改为 Single partion
时,json 文件具有正确的排序顺序。