在 ADF 中参数化 Azure Blob 存储链接服务
Posted
技术标签:
【中文标题】在 ADF 中参数化 Azure Blob 存储链接服务【英文标题】:Parameterize Azure Blob Storage Linked Service in ADF 【发布时间】:2019-09-27 18:43:10 【问题描述】:我想创建一个 Azure 数据工厂管道,将文件复制到多个存储帐户。我的计划是将管道参数中的存储帐户连接信息定义为一个数组,并使用 ForEach 活动循环遍历数组中的每个对象,将连接信息传递给另一个管道。
[
"destinationBlob":
"connectionString": "Conn1"
,
"destinationBlob":
"connectionString": "Conn2"
,
"destinationBlob":
"connectionString": "Conn3"
]
我的问题是,是否可以参数化与 Azure Blob 存储链接服务的连接?
【问题讨论】:
Microsoft 接受通过 JSON 添加参数是一种有效的方法。请参阅我对 azure docs docs.microsoft.com/en-us/azure/data-factory/… 的评论 【参考方案1】:这实际上是可以做到的。示例 JSON:
"name": "DataLakeBlob",
"type": "Microsoft.DataFactory/factories/linkedservices",
"properties":
"parameters":
"StorageAccountEndpoint":
"type": "String",
"defaultValue": "https://testblobstorage.blob.core.windows.net"
,
"type": "AzureBlobStorage",
"typeProperties":
"serviceEndpoint": "@linkedService().StorageAccountEndpoint"
,
"description": "Test Description"
【讨论】:
【参考方案2】:基于document,Linked Service 的 ADF 参数化不支持 Azure Blob 存储。
因此,您只能将特定文件复制到不同的目的地。
【讨论】:
感谢您的回复。在您共享的文档中,我看到:“对于所有其他数据存储,您可以通过选择 Connections 选项卡上的 Code 图标并使用 JSON 编辑器来参数化链接服务。”我会尝试一下,看看会发生什么...... 有可能会起作用,我已经使用 keyvault 配置来处理无法从 UI 使用代码视图配置 keyvault 的字段。我复制了基于其他链接服务的粘贴配置,并且完成了这项工作。 更新:我尝试使用 JSON 编辑器参数化 Azure 存储连接字符串,但未成功。我必须为每个存储目标创建一个新的复制活动、链接服务和数据集...这是参数化语音支持的链接feedback.azure.com/forums/270578-data-factory/suggestions/… 正如我在下面的回答中所建议的,有一种方法可以做到这一点。【参考方案3】:编辑:微软承认了这一点。 https://docs.microsoft.com/en-us/azure/data-factory/parameterize-linked-services#
对于那些寻找 SAS 令牌参数化的人,您可以使用以下 JSON。 请务必选中屏幕截图中的复选框以应用 JSON。
"type":"Microsoft.DataFactory/factories/linkedservices",
"properties":
"parameters":
"StorageAccountEndpoint":
"type": "String",
"defaultValue": "https://<<yourstorageaccountname>>.blob.core.windows.net/?sv=2018-03-28&ss=b&srt=sco&sp=rwdlac&se=2019-10-20T16:33:57Z&st=2019-09-20T08:33:57Z&spr=https&sig=lDrBjD%2BjM2T1XjRW997VPMqDp99ZxVoReyRK0VEX7zQ%3D"
,
"type": "AzureBlobStorage",
"typeProperties":
"sasUri": "@linkedService().StorageAccountEndpoint"
【讨论】:
你确定这个真的有效吗?它使用“defaultValue”,从不使用“StorageAccountEndpoint”的实际值。 “StorageAccountEndpoint”始终为空,如果您删除“defaultValue”,您将在运行时遇到错误。 是的。我通过触发器在运行时传递实际值 @DhruvJoshi,您能否说明如何通过触发器传递 StorageAccountEndpoint 值? 创建一个从触发器接受参数的管道,并具有从管道接受参数的数据集和由数据集提供的参数化链接服务。你去吧。如果这没有帮助,请告诉我。以上是关于在 ADF 中参数化 Azure Blob 存储链接服务的主要内容,如果未能解决你的问题,请参考以下文章
在 Azure 存储中创建文件列表并使用 ADF 将其发送到 sql 表
Azure Data PlatformETL工具(12)——ADF 参数
使用 Python 脚本的 ADF 管道中的 Azure 函数