我正在尝试将数据从 SQL Server 复制到 CosmosDb。
我创建了一个 DataFlow 来应用转换并为 CosmosDb 容器中的项目设置正确的 json 架构。
SQL Server 数据如下所示:
身份证 | 姓名 | 数组 |
---|---|---|
1 | 姓名1 | [{"属性1":"值1","属性2":"值2"},{"属性1":"值1"}] |
2 | 姓名2 | [{"属性1":"值1","属性2":"值2"},{"属性1":"值1"}] |
CosmosDb 架构应如下所示:
{
"id" : "1",
"name" : "Name1",
"array" : [
{
"property1":"value1",
"property2":"value2"
},
{
"property1":"value1"
}
]
}
我在数据流中使用了派生列和解析活动,在表达式生成器中应用了多个函数,但我找不到合适的解决方案。
是否有一种直接的方法可以将 jsons 值的字符串数组解析为实际的 jsons 数组,而无需操作字符串,例如在 Azure 数据工厂中使用拆分或替换?
要实现您的要求,您可以在 ADF 数据流中执行以下步骤。
步骤:1 以SQL表作为数据集进行源转换。
步骤:2 采用导出的列变换并将数组列的表达式指定为
split(replace(replace(replace(Array,'[',''),']',''),'},{','}|{'),'|')
。这会将整个字符串数据拆分为数组数据。
步骤:3 采用展平变换并按列展开为Array。
步骤:4 采用Parse转换将Json数据解析为列。 使用的输出列类型表达式:
(property1 as string, property2 as string)
步骤:5 进行聚合转换并按
Id, Name
对数据进行分组,并将聚合列的表达式指定为 Array=collect(Array)
。
聚合转换的输出:
步骤:6 添加接收器转换并将 cosmos db 作为接收器数据集。
当您使用数据流运行管道时,数据将作为
Array of Json
本身复制到 cosmos db 中。