了解响应为 json 数组时数据工厂数据流 REST 源行为

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

我试图了解 REST 源在数据工厂数据流中的工作原理。我将从一个简单的案例开始。 这是我的 API 的示例响应 (https://reqres.in/api/users):

{
    "page": 2,
    "per_page": 6,
    "total": 12,
    "total_pages": 2,
    "data": [
        {
            "id": 7,
            "email": "[email protected]",
            "first_name": "Michael",
            "last_name": "Lawson",
            "avatar": "https://reqres.in/img/faces/7-image.jpg"
        },
        {
            "id": 8,
            "email": "[email protected]",
            "first_name": "Lindsay",
            "last_name": "Ferguson",
            "avatar": "https://reqres.in/img/faces/8-image.jpg"
        },
    ],
    "support": {
        "url": "https://reqres.in/#support-heading",
        "text": "To keep ReqRes free, contributions towards server costs are appreciated!"
    }
}

如您所见,响应负载是一个 Json 对象,其中包含包含实际数据内容的

data
数组。

我需要展开

data
字段并使用数据流保存在 csv 文件中。这非常简单:

  • 源投影在
    data
    列内定义一个名为
    complex array
    、类型为
    body
    的字段:
  • 现在让我们按
    data
    字段展开并使用显式映射:
  • 只需使用自动映射功能使数据流入 Sink 即可:

现在,让我们更改源代码,并使用稍微不同的响应(https://jsonplaceholder.typicode.com/posts):

[
  {
    "userId": 1,
    "id": 1,
    "title": "sunt aut facere repellat",
    "body": "quia et suscipit suscipit recusandae consequuntur expedita"
  },
  {
    "userId": 1,
    "id": 2,
    "title": "qui est esse",
    "body": "est rerum tempore vitae"
  },
  {
    "userId": 1,
    "id": 3,
    "title": "ea molestias",
    "body": "et iusto sed quo"
  },
  {
    "userId": 1,
    "id": 4,
    "title": "eum et est occaecati",
    "body": "ullam et saepe reiciendis voluptatem adipisci"
  }
]

在这种情况下,响应正文只是一个 Json 数组。这个特殊的细节,使得不可能达到与以前相同的目标。

  • 投影显示了

    body
    ,它被定义为
    complex object
    ,而不是像我期望的那样是一个复杂的数组

  • 事实上,展开数据是不允许的(该选项是灰色的)

  • 此外,尝试直接将

    body
    字段写入 csv 接收器将导致验证错误:

最终,我找到了一种解决方法,您应该将 Aggregate 任务与 collect() 函数结合使用。但是,这只是很多开销。

我仍然认为我错过了一些东西,但似乎数据工厂数据流不支持 Json 数组对象作为来自 REST 源的响应负载。

rest azure-data-factory google-cloud-dataflow
1个回答
0
投票

Flatten transformation
使用分层结构内的数组值在第二个示例中,您有Araay值,但它不是分层结构。

要展开这种类型的结构,您也可以使用派生列。

enter image description here

输出:

enter image description here

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