如何在 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?我以相同的顺序使用了Lookup
和Set variable
活动。管道也运行良好。但我无法验证set variable
活动是否获得了所需的 URL。
您可以在管道的 OUTPUT 属性中检查设置变量的输出。用一个片段更新了我的答案以检查设置变量输出。
知道了 - 谢谢 (+1)。以上是关于如何在 Azure Synapse 或数据工厂管道中设置和获取变量值的主要内容,如果未能解决你的问题,请参考以下文章
Azure Synapse 管道:如何将增量更新从 SQL Server 移动到 Synapse 以处理数字
是否可以使用 Azure Synapse 和 Azure 数据工厂将 CSV 转换为 XML?