Azure 数据工厂将 Json 字符串数组解析为 json 数组

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

我正在尝试将数据从 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 数据工厂中使用拆分或替换?

azure azure-data-factory expressionbuilder
1个回答
0
投票

要实现您的要求,您可以在 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 中。

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