ADF 使用带有 GET 请求的延续令牌复制数据活动分页

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

我正在 ADF 服务中构建 ETL 管道以从 API 加载数据,但我在使用延续令牌实现分页规则时遇到困难。 我知道,根据 Azure 文档,应该可以使用这种方法 - 下一个请求的标头 = 当前响应正文中的属性值。

我想要实现的结构:

  • 使用管道 Web 活动向 https://test.net/abc/tableName?size=1000 发出 GET 请求,并从响应正文中获取 continuationToken 作为输出

  • 将其存储在“设置变量”活动中

  • 使用复制活动向
    发出 GET 请求 https://test.net/abc/tableName?size=1000&seekOperation=Next
    header = Web 活动响应正文中的 continuationToken(存储在变量中)。发出另一个 GET 请求来检索所有数据,直到响应正文中不存在 continuationToken,每次都将令牌添加到标头。

我正在尝试分页规则,所以我设置了类似的内容,但它不起作用:

    "paginationRules": {
        "supportRFC5988": "true",
        "Headers.ContinuationToken": {
            "value": "$.continuationToken",
            "type": "Expression"
        },
        "EndCondition:body.continuationToken": "NonExist"
}

我遇到的错误是这样的:

“源”端发生故障。 错误代码=RestInvalidPaginationRule,'类型=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,消息=无效 PaginationRule, RuleKey='body.continuationToken', RuleValue='NonExist',Source=Microsoft.DataTransfer.ClientLibrary,'

另外,我不知道如何使其在复制活动中首次执行 GET 请求,使用变量中存储的值,然后从该请求的响应正文中检索它。

在附加标头中,我添加了 Token:@variables('continuationToken'),但是如何使其迭代工作?

如果有人能帮助我构建这个逻辑,我将非常感激。 现在看来,是这样的:

enter image description here

azure azure-data-factory etl pipeline
1个回答
0
投票

“源”端发生故障。 ErrorCode=RestInvalidPaginationRule,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=无效的 PaginationRule,RuleKey='body.continuationToken',RuleValue='NonExist',Source=Microsoft.DataTransfer.ClientLibrary,'

您面临的错误是因为您没有将正确的值传递给结束条件参数,当您将主体节点作为结束条件访问时,它应该如下所示:

"EndCondition:$.continuationToken": "NonExist"

根据您的要求,您可以尝试这种方法,使用直到循环和一些变量来存储下一次迭代的值。

enter image description here

对于上图,您需要按照以下步骤操作:

  • 首先进行复制活动来复制第一次迭代的数据,其中标头中不需要继续令牌值。
  • 然后采取网络活动来获取第一次迭代的继续令牌值。
  • 然后使用 Set 变量来存储您从之前的 Web 活动中获取的值。
  • 然后将具有以下活动和条件的活动作为下一个值变量的值为 null。

enter image description here

  • 第一个设置变量(初始值)活动将存储您从变量外部获得的值,直到活动(第一个值)为止。
  • 网络活动,用于获取每次迭代的继续令牌值。
  • 复制活动以使用该值并复制数据。
  • 第二个设置变量(下一个值)来存储从网络活动获取的继续令牌值。
  • 第三个设置变量(切换值)将第一个设置变量(初始值)的值与第二个设置变量(下一个值)交换。

这是您可以根据您的要求在 ADF 中开发的示例逻辑

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