Azure Data Factory单复制活动多表复制及并行复制度使用咨询
用单个Azure Data Factory Copy活动复制多表 + 并行度配置指南
嗨,刚好我之前做过类似的优化,来给你详细说说怎么实现:
一、单个Copy活动复制多张表的实现方法
ADF的Copy活动完全支持一次性复制多张表,主要有两种配置方式:
1. 使用「表名列表」批量复制
这种方式适合直接复制整张表的场景:
- 配置源数据集为你的本地SQL Server,在Copy活动的源标签里,将「使用查询」切换为「表名列表」
- 在「表名列表」里填写要复制的表名,格式是JSON数组,比如:
["Sales.Customers", "Sales.Orders", "Production.Products"](注意要包含schema名,避免同名表冲突) - 配置目标数据集为Azure Data Lake Storage,在目标标签里,设置「文件路径」为动态内容,比如
@concat('raw/', item().TableName, '/'),这样每张表会生成独立的文件夹 - 「文件名」可以设为
@concat(item().TableName, '_', utcnow('yyyyMMddHHmmss'), '.parquet')(如果用Parquet格式)或者其他你需要的命名规则
2. 使用「查询列表」自定义复制逻辑
如果有些表需要过滤数据(比如只复制近30天的记录),可以用这种方式:
- 同样在Copy活动的源标签里,选择「查询列表」
- 填写JSON格式的查询数组,比如:
[ "SELECT * FROM Sales.Customers WHERE CreateTime >= DATEADD(day, -30, GETDATE())", "SELECT OrderID, CustomerID, OrderDate FROM Sales.Orders", "SELECT * FROM Production.Products WHERE IsActive = 1" ] - 目标端同样用动态内容区分不同查询的输出,比如
@concat('raw/query_', item().Index, '/')来按查询索引生成文件夹
二、Degree of Copy Parallelism(复制并行度)的使用
这个参数就是用来控制单个Copy活动内,同时执行复制任务的数量,非常适合优化多表复制的效率:
1. 在哪里设置?
在Copy活动的设置标签里,找到「并行复制」选项,直接输入数字即可(默认是4)。比如你设置为5,那么Copy活动会同时复制5张表(或5个查询结果),剩下的任务会排队等待。
2. 调整并行度的注意事项
- 不要盲目调高:并行度越高,对源SQL Server的压力越大,可能会影响业务系统的性能,建议先从小的数值(比如4-8)测试,观察源数据库的CPU、IO负载
- 结合目标存储性能:ADLS Gen2的吞吐量有一定限制,如果并行度过高,可能会遇到Throttling(限流),此时可以适当降低并行度,或者提升ADLS的性能层级
- 和多表复制结合:比如你要复制10张表,并行度设为3,那么会同时运行3个复制任务,完成一个后立即启动下一个,直到所有表复制完成
三、额外的最佳实践
- 用管道参数管理表列表:把表名列表或查询列表设为管道参数,这样不需要修改Copy活动就能调整要复制的表,更灵活
- 监控复制状态:在ADF的监控面板里,可以看到每个子复制任务的进度、耗时,方便排查慢表的问题
- 分区优化:对于超大表,建议先在源端做分区,然后用查询列表按分区复制,再结合并行度,能大幅提升复制速度
内容的提问来源于stack exchange,提问作者CloudRock
相关产品推荐
相关产品推荐

