繁体   English   中英

如何从 Azure 数据工厂中的 JSON 获取数组?

[英]How to get an array from JSON in the Azure Data Factory?

我的实际(工作不正常)设置有两个管道:

  1. 将 API 数据获取到湖:对于 SQL 中元数据表中的每一行,调用 REST API 并将回复(json 文件)复制到 Blob 数据湖。
  2. 将数据从湖复制到 SQL:在 SQL 中为每个文件自动创建表。

结果是 SQL 中正确的表数。 只有表格的内容不是我所希望的。 它们都包含 1 个名为 odata.metadata 的列和 1 个条目,即元数据的链接。 如果我从数据湖中的 JSON 中手动删除元数据,然后运行第二个管道,则 SQL 表就是我想要的。

有:

{  "odata.metadata":"https://test.com", 
"value":[
{
  "Key":"12345",
"Title":"Name",
"Status":"Test"
}]}

想:

[{
"Key":"12345",
"Title":"Name",
"Status":"Test"
}]

我试图在 API 调用中添加 $.['value'] 。 结果是没有 odata.metadata 行,但数组以 {value: 开头,这导致复制到 SQL 时出错

我还尝试使用映射(在接收器中)到 SQL。 这给出了我手动指定映射的数据集的所需结果,但仅适用于数组中具有相同列数的数据集。 我不想手动为 170 个电话做映射...

有谁知道如何在 ADF 中处理这个问题? 现在我觉得唯一的解决方案是在管道中添加一个 Python 步骤,但我希望有一种有点标准的 ADF 方式来做到这一点!

在将数据复制到 SQL 之前,您可以使用扁平格式化程序添加另一个带有数据流的管道以从 JSON 文件中删除内容。

在展平 JSON 文件之前

这是我在将 JSON 数据复制到 SQL 数据库而不展平时所看到的: 在此处输入图片说明

展平 JSON 文件后

添加了一个带有数据流的管道以flatten JSON 文件以从数组中删除“odata.metadata”内容。

源码预览 在此处输入图片说明

展平格式化程序

从输入数组中选择所需的对象在此处输入图片说明

从输入数组中选择对象后,您只能在 Flatten 格式化程序预览中看到 value 下的

在此处输入图片说明

水槽预览

在此处输入图片说明

展平后生成的文件。 在此处输入图片说明

将生成的文件作为输入复制到 SQL。

在此处输入图片说明

注意:如果您的输入文件架构不是恒定的,您可以启用Allow schema drift以允许架构更改

在此处输入图片说明

参考: 映射数据流中的模式漂移

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM