在 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 参数

Azure 数据工厂到 Azure Blob 存储权限

使用 Python 脚本的 ADF 管道中的 Azure 函数

Azure ADF 管道复制数据日志文件未触发第二个管道的“已创建 Blob”触发器

使用参数在 Azure 数据工厂中导入架构