【问题标题】:JSon Parsing in ADF web activitiyADF Web 活动中的 JSON 解析
【发布时间】:2021-07-20 17:02:43
【问题描述】:

我正在尝试将 JSON 从一项活动用于另一项发布活动

第一个活动的输出是

{ “pid”:“0”, “名称”:“test_onbirded1”, “描述”:“ON_BOARDED_TRAIT111”, "traitType": "ON_BOARDED_TRAIT", "dataSourceId": "122233", "folderId": "982331", "traitRule": "(lifecyclemainfrequent == 2)", “ADFWebActivityResponseHeaders”:{ "x-ms-request-id": "b583f633-501e-0089-1270-7961c2000000", "x-ms-version": "2020-08-04", "x-ms-creation-time": "2021 年 7 月 13 日星期二 13:18:52 GMT", “x-ms-lease-status”:“解锁”, “x-ms-lease-state”:“可用”, "x-ms-blob-type": "块块", “x-ms-server-encrypted”:“真”, “接受范围”:“字节”, "日期": "2021 年 7 月 15 日星期四 11:58:36 GMT", "ETag": ""0x8D94787B0F9ED99"", "服务器": "Windows-Azure-Blob/1.0;Microsoft-HTTPAPI/2.0", “内容长度”:“208”, “内容类型”:“应用程序/八位字节流”, “上次修改时间”:“2021 年 7 月 15 日星期四 11:57:16 GMT” }, "effectiveIntegrationRuntime": "DefaultIntegrationRuntime (北欧)", “执行持续时间”:0, “持续时间队列”:{ “集成运行时间队列”:0 }, “计费参考”:{ "activityType": "外部活动", “计费持续时间”:[ { “meterType”:“AzureIR”, “持续时间”:0.016666666666666666, “单位”:“小时” } ] } }

但我只想用

{ “pid”:“0”, “名称”:“test_onbirded1”, “描述”:“ON_BOARDED_TRAIT111”, "traitType": "ON_BOARDED_TRAIT", "dataSourceId": "122233", "folderId": "982331", "traitRule": "(lifecyclemainfrequent == 2)}

在下一个发布的网络活动中

如何将其他值从输出排除到输入:) 到下一个网络活动。

【问题讨论】:

    标签: azure-data-factory azure-data-factory-pipeline


    【解决方案1】:

    如果可能的话,使用 Select 作为临时活动,然后使用 post。 https://docs.microsoft.com/en-us/azure/data-factory/data-flow-select

    【讨论】:

      【解决方案2】:

      与其使用数据流和启动整个 Spark 集群来进行 API 调用,不如直接使用前一个 API 调用的输出值显式设置下一个 API 的主体。

      例如:

      如果您对第一个 API 调用的响应是:

      { "pid": "0", "name": " test_onbirded1", "description": " ON_BOARDED_TRAIT111 ", "traitType": " ON_BOARDED_TRAIT", "dataSourceId": " 122233", "folderId": " 982331", "traitRule": "(lifecyclemainfrequent == 2)", "ADFWebActivityResponseHeaders": { "x-ms-request-id": "b583f633-501e-0089-1270-7961c2000000", "x-ms-version": "2020-08-04", "x-ms-creation-time": "Tue, 13 Jul 2021 13:18:52 GMT", "x-ms-lease-status": "unlocked", "x-ms-lease-state": "available", "x-ms-blob-type": "BlockBlob", "x-ms-server-encrypted": "true", "Accept-Ranges": "bytes", "Date": "Thu, 15 Jul 2021 11:58:36 GMT", "ETag": ""0x8D94787B0F9ED99"", "Server": "Windows-Azure-Blob/1.0;Microsoft-HTTPAPI/2.0", "Content-Length": "208", "Content-Type": "application/octet-stream", "Last-Modified": "Thu, 15 Jul 2021 11:57:16 GMT" }, "effectiveIntegrationRuntime": "DefaultIntegrationRuntime (North Europe)", "executionDuration": 0, "durationInQueue": { "integrationRuntimeQueue": 0 }, "billingReference": { "activityType": "ExternalActivity", "billableDuration": [ { "meterType": "AzureIR", "duration": 0.016666666666666666, "unit": "Hours" } ] } }
      

      那么你的下一个 API 调用的主体应该是这样的:

      { 
          "pid": "@{activity('First API Call').output.pid}",
          "name": "@{activity('First API Call').output.name}",
          "description": "@{activity('First API Call').output.description}",
          "traitType": "@{activity('First API Call').output.traitType}",
          "dataSourceId": "@{activity('First API Call').output.dataSourceId}", 
          "folderId": " @{activity('First API Call').output.folderId}", 
          "traitRule": "@{activity('First API Call').output.traitRule}"
      }
      

      如您所见,它直接使用前一个活动的输出,无需启动 spark 集群的成本。

      【讨论】:

        【解决方案3】:

        您无法在数据流中实现这一点。

        因此,在复制数据活动中,使用列映射生成一个新文件(在接收器中)。

        将此新文件用作数据流中的源。

        第一步:映射:

        Step2:在 Mapping 时删除不必要的属性,如下图所示:

        第三步:输入

        第四步:输出

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-08
          相关资源
          最近更新 更多