【问题标题】:Transfer the output of 'Set Variable' activity into a json file [Azure Data Factory]将“设置变量”活动的输出传输到 json 文件 [Azure 数据工厂]
【发布时间】:2020-06-25 15:10:30
【问题描述】:

在数据工厂中,我们能否将“设置变量”活动的输出记录为 json 文件?

【问题讨论】:

    标签: json azure-data-factory azure-data-lake azure-data-factory-2


    【解决方案1】:

    实现此要求的另一种最简单的方法是利用“Add additional columns during copy”功能,如下所示。

    有一个设置变量活动并设置变量的值,然后是一个复制活动。在复制活动Source 设置中,您有Additional columns 属性,您可以在其中为源变量列命名。使用动态表达式@variables('varInput') 分配变量值。然后在Mapping 部分,您可以删除不需要的列,并且只保留所需的列,包括您在Additional columnsSource 中创建的变量列。然后在目标端给出你想要的列名并测试它。

    注意:此功能适用于最新的数据集模型。如果您在 UI 中没有看到此选项,请尝试创建一个新数据集。

    希望这会有所帮助。

    【讨论】:

    • 所以在您选择的源属性中:数据集中的文件路径,但您的源不是文件而是变量。那么你在源数据集中的 FolderPath 和 FileName 中给出了什么?因为这些字段是必填的。
    • 这工作谢谢! @BilalShafqat,您可以在数据源中创建一个空的 json 文件,并在源中使用该文件的路径。
    • 你是如何出于兴趣制作 GIF 的,@KranthiPakala-MSFT?
    • 嘿@wBob 你可以试试这个-screentogif.com
    • @KranthiPakala-MSFT 这仅在您有一个现有的 json 文件时才有效,当您在源数据集中没有现有文件并且只想将一堆变量保存到文件时该怎么办json格式。
    【解决方案2】:

    据我所知,没有内置的简单方法可以满足您的需求。

    2 种解决方法:

    1.使用ADF中的启用Azure Monitor diagnostic log将数据作为JSON文件记录到Azure Blob存储中。每个活动的execution details(contains output)都可以记录在文件中。但是,您需要了解json架构的结构并获取你想要什么。

    2.Set Variable Activity后使用Azure Function或Web Activity调用API(@activity('Set Variable1').output)。使用 SDK 代码将输出保存为函数方法中的 json 文件。

    【讨论】:

    • 感谢您的回复。显然我还需要访问 Azure Function,所以我现在无法测试它。我仍然想知道如何实现这一点(使用哪种方法等)。
    • @OreoFanatics 是否可以将参数传递到 Azure 函数中,如果可以,@activity('Set Variable1').output 正是该参数。然后在 Azure Function 中,获取该参数并使用 blob storage sdk 将其存储到 json 文件中。
    • 只是想分享这个信息:我们不能在后续活动中使用@activity('Set Variable1').output,因为活动“设置变量1”的输出不能被引用,因为它没有输出。
    【解决方案3】:

    我通常使用复制活动来写入文件,但可以使用 Blob REST APIPUT 命令将内容写入 Azure Data Lake (ADLS) Gen 2。 Web 活动中的设置对此工作至关重要:

    Setting Value Notes
    URL some blob NB this is using the .blob address not the .dfs one. The path must end in ?resource=file
    Method PUT
    Headers
    x-ms-version 2019-07-07
    x-ms-blob-type BlockBlob
    Content-Type application/json This value is for writing json but can be customised eg application/csv
    Body @variables('varResult') I'm using a pre-prepared variable with json content but this can be anything
    Authentication Managed Identity
    Resource https://storage.azure.com

    请注意,您必须将 URL 设置为所需的文件名和文件夹,并使用 .blob 地址。 URL 必须以 ?resource=file: 结尾:

    示例 URL/Blob 地址 https://yourstorage.blob.core.windows.net/yourFilesystem/yourFolder/someFile.json?resource=file

    请注意,我在这里写的是 json,但您可以根据需要进行修改,例如 application/csv。我在 Body 中使用了一个变量,但这可以是你喜欢的任何东西。文档说明这仅支持最大 2GB 的文件,因此仅适用于小型活动。

    屏幕截图:

    我无法让它与 .dfs 地址和/或 Data Lake 方法一起使用,但只要它适用于 blob 就可以了。

    【讨论】:

      【解决方案4】:

      如果您想写入 Array 类型的变量的内容,有一种解决方法可以正常工作。 目标:将数组的内容作为每个数组值 1 行写入文件

      变量:[a,b,c]

      文件内容:
      一个
      b
      c

      步骤:

      1. 创建一个只有 1 行的“空”文件,可以是 json 文件或其他只有 1 行的文件
      2. 使用附加列机制
      3. Expand-join-with-carriage 使用 @join 和 @decodeUriComponent 返回数组变量 -> @join(variable,decodeUriComponent('%0A'))

      是的,微软没有 @char(int) 函数来创建特殊字符,这太可怕了。(或者我是个白痴,不知道连接 '\n' 的正确方法,这我试过但没有用。)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-25
        • 1970-01-01
        • 2019-04-24
        • 2020-12-13
        • 1970-01-01
        • 2019-03-01
        相关资源
        最近更新 更多