【发布时间】:2020-06-25 15:10:30
【问题描述】:
在数据工厂中,我们能否将“设置变量”活动的输出记录为 json 文件?
【问题讨论】:
标签: json azure-data-factory azure-data-lake azure-data-factory-2
在数据工厂中,我们能否将“设置变量”活动的输出记录为 json 文件?
【问题讨论】:
标签: json azure-data-factory azure-data-lake azure-data-factory-2
实现此要求的另一种最简单的方法是利用“Add additional columns during copy”功能,如下所示。
有一个设置变量活动并设置变量的值,然后是一个复制活动。在复制活动Source 设置中,您有Additional columns 属性,您可以在其中为源变量列命名。使用动态表达式@variables('varInput') 分配变量值。然后在Mapping 部分,您可以删除不需要的列,并且只保留所需的列,包括您在Additional columns 的Source 中创建的变量列。然后在目标端给出你想要的列名并测试它。
注意:此功能适用于最新的数据集模型。如果您在 UI 中没有看到此选项,请尝试创建一个新数据集。
希望这会有所帮助。
【讨论】:
据我所知,没有内置的简单方法可以满足您的需求。
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 文件。
【讨论】:
@activity('Set Variable1').output 正是该参数。然后在 Azure Function 中,获取该参数并使用 blob storage sdk 将其存储到 json 文件中。
@activity('Set Variable1').output,因为活动“设置变量1”的输出不能被引用,因为它没有输出。
我通常使用复制活动来写入文件,但可以使用 Blob REST API 和 PUT 命令将内容写入 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 就可以了。
【讨论】:
如果您想写入 Array 类型的变量的内容,有一种解决方法可以正常工作。 目标:将数组的内容作为每个数组值 1 行写入文件
变量:[a,b,c]
到
文件内容:
一个
b
c
步骤:
是的,微软没有 @char(int) 函数来创建特殊字符,这太可怕了。(或者我是个白痴,不知道连接 '\n' 的正确方法,这我试过但没有用。)
【讨论】: