同一租户跨订阅ADF Blob容器复制数据活动配置求助
同租户跨订阅Blob存储容器数据复制的链接服务适配方案
场景概述
同一Azure租户内,两个不同订阅各有一个启用公共访问的Blob存储账户:
- 源存储账户包含
blobcontainer1uat等以uat为后缀的容器 - 需要将源容器数据批量复制到目标存储账户中对应名称(将
uat替换为stg,如blobcontainer1stg)的容器内 - 参考跨订阅文件共享复制方案时,原方案中
@{linkedService().filesharename}的写法不适用于Blob存储链接服务,需调整配置逻辑
解决方案步骤
1. 配置Blob存储链接服务
分别为源、目标Blob存储账户创建Azure Blob存储链接服务:
- 身份验证方式推荐选择托管标识(同租户下权限配置更便捷),也可使用账户密钥或SAS令牌
- 注意:不要在链接服务中指定固定容器,容器名的动态指定放在数据集层面实现
2. 创建动态数据集
源数据集
- 关联源Blob链接服务
- 容器名称配置为动态内容:
- 若通过流水线参数传递单个容器名:
@{pipeline().parameters.SourceContainerName} - 若批量遍历容器,后续结合Get Metadata+ForEach:
@{item().name}(item为遍历到的容器对象)
- 若通过流水线参数传递单个容器名:
目标数据集
- 关联目标Blob链接服务
- 容器名称通过表达式动态生成(替换源容器名的后缀):
- 单容器参数场景:
@{replace(pipeline().parameters.SourceContainerName, 'uat', 'stg')} - 批量遍历场景:
@{replace(item().name, 'uat', 'stg')}
- 单容器参数场景:
3. 构建复制流水线
批量复制场景(多容器)
- 添加Get Metadata活动:
- 关联源Blob数据集(容器留空)
- 在"字段"选项中勾选
Child Items,用于获取源账户下所有容器列表
- 添加ForEach活动:
- 输入Items设置为过滤后的容器列表:
@filter(activity('Get Metadata').output.childItems, contains(item().name, 'uat'))
- 输入Items设置为过滤后的容器列表:
- 在ForEach内部添加复制活动:
- 源选择源数据集,目标选择目标数据集,自动继承动态容器名配置
单容器复制场景
直接添加复制活动,通过流水线参数传入源容器名,目标容器名自动通过表达式生成
关键适配说明
原文件共享方案中@{linkedService().filesharename}是从链接服务读取固定文件共享名,但Blob存储链接服务无filesharename属性。因此Blob场景需将容器名的动态逻辑移至数据集层面,通过参数、遍历变量或字符串替换表达式来实现容器名的动态映射,而非从链接服务读取配置。
内容的提问来源于stack exchange,提问作者Vaishnavi Vaishu
相关产品推荐
相关产品推荐

