如何在 Azure Synapse 或数据工厂管道中设置和获取变量值

Posted

技术标签:

【中文标题】如何在 Azure Synapse 或数据工厂管道中设置和获取变量值【英文标题】:How to set and get variable value in Azure Synapse or Data Factory pipeline 【发布时间】:2022-01-05 10:59:01 【问题描述】:

我在 Azure Synapse Analytics 工作区中创建了一个带有 Copy Activity 的管道,例如 activity1,它使用 source 作为 REST Api 和 @ 将以下 JSON 加载到 Azure Data Lake Storage Gen2 (ADLSGen2) 987654330@(目的地)为ADLSGen2。 Ref.

MyJsonFile.json(存储在 ADLSGen2 中)

"file_url":"https://files.testwebsite.com/Downloads/TimeStampFileName.zip"

在同一个管道中,我需要添加一个activity2,它从上面的JSON 读取URL,并添加一个activity3,它将zip 文件(在那个URL 中提到)加载到同一个@ 987654338@.

问题:我们如何在现有管道中添加一个activity2,以便从上面的JSON 获取URL,然后将其传递给activity3?或者,是否有更好的建议/解决方案来完成这项任务。

备注:我尝试过Set Variable Activity(如下所示),首先在管道中声明一个变量,然后在此活动中使用该变量,例如myURLVar,但我不确定如何动态地将 myURLVar 的值设置为来自上述 JSON 的 URL 的值。请注意 Json 文件名 (MyJsonFile.json) 是一个常量,但 URL 中的 zip 文件名是动态的(基于时间戳),因此我们不能只对上述 url 进行硬编码。

【问题讨论】:

您可以尝试在复制活动之后添加一个查找活动,其来源是存储在 ADLSGen2 中的 MyJsonFile.json。然后通过查找活动的输出来获取 file_url。 【参考方案1】:

正如@Steve Zhao 在 cmets 中提到的,使用 lookup 活动从 JSON 文件中获取数据,并使用 set variable 活动从查找输出值中提取所需的 URL。

lookup 活动连接到先前复制数据活动的接收器数据集。

输出查找活动:

我在 set 活动中使用了 substring 函数从查找输出中提取 URL。

@replace(substring(replace(replace(replace(string(activity('Lookup1').output.value),'"',''),'',''),'',''),indexof(replace(replace(replace(string(activity('Lookup1').output.value),'"',''),'',''),'',''),'http'),sub(length(string(replace(replace(replace(string(activity('Lookup1').output.value),'"',''),'',''),'',''))),indexof(replace(replace(replace(string(activity('Lookup1').output.value),'"',''),'',''),'',''),'http'))),']','')

检查设置变量的输出

设置变量输出值

【讨论】:

您如何测试以确保Set-Variable 活动确实从查找输出值中获得了所需的 URL?我以相同的顺序使用了LookupSet variable 活动。管道也运行良好。但我无法验证set variable 活动是否获得了所需的 URL。 您可以在管道的 OUTPUT 属性中检查设置变量的输出。用一个片段更新了我的答案以检查设置变量输出。 知道了 - 谢谢 (+1)。

以上是关于如何在 Azure Synapse 或数据工厂管道中设置和获取变量值的主要内容,如果未能解决你的问题,请参考以下文章

Azure Synapse 管道:如何将增量更新从 SQL Server 移动到 Synapse 以处理数字

是否可以使用 Azure Synapse 和 Azure 数据工厂将 CSV 转换为 XML?

如何从 Synapse 管道触发 ADF 管道

如何使用 Azure 数据工厂管道创建容器?

我可以在不使用管道的情况下从 Azure Synapse 查询 SQL Server 数据库吗?

Azure Synapse Pipeline Notebook 返回错误