参数化Azure DataFactory:获取Blob信息参数化Sink数据集属性的方法咨询
解答:Azure SQL到ADLS拷贝场景下Blob属性获取与Sink参数化方法
可以实现,根据你使用的拷贝工具不同,对应的操作方法如下:
- 如果你使用Azure Data Factory/ Azure Synapse Pipeline做拷贝活动
- 方法1:敏感参数走Azure Key Vault托管读取
你可以提前把存储账号的container名称、固定Blob路径前缀、存储账号密钥等信息存在Key Vault中,在配置Sink数据集对应的存储链接服务时直接关联Key Vault拉取密钥,同时把数据集的container、blobName属性设置为流水线参数/变量,运行时动态传入即可完成参数化配置。 - 方法2:调用ARM接口动态拉取存储账号密钥
若存储账号和当前流水线属于同一租户,你可以在拷贝活动前新增Web活动,调用Azure资源管理器接口拉取存储密钥,请求示例为POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}/listKeys?api-version=2023-01-01,返回结果中的keys[0].value就是存储账号主密钥,后续直接作为参数传递给Sink数据集即可。 - 方法3:动态生成Blob名直接配置表达式
如果你需要根据源表名、同步时间等信息动态生成Blob名,不需要提前获取固定值,可以直接在Sink数据集的Blob路径配置处填写动态表达式,比如@concat('sql_sync/', pipeline().parameters.TableName, '/', utcnow('yyyyMMddHHmm'), '.parquet'),container属性也可以直接引用流水线参数,触发运行时传入即可。
- 方法1:敏感参数走Azure Key Vault托管读取
- 如果你使用自定义代码(Python/Java等SDK)做拷贝
直接引入Azure Storage Blob SDK,container名称可以提前配置在环境变量/配置文件中,存储账号密钥可以通过DefaultAzureCredential或者StorageSharedKeyCredential类读取,初始化Blob客户端时就可以动态指定Blob名,直接作为Sink输出的参数即可。
注意:存储账号密钥属于敏感信息,禁止硬编码在代码、流水线配置中,尽量使用Key Vault托管,避免密钥泄露。
内容的提问来源于stack exchange,提问作者Fraz
相关产品推荐
相关产品推荐

