如何在Azure Data Factory管道中将Filter活动输出用作Copy活动源
解决方法(无需Data Flow)
根据你的场景,Copy活动无法直接接收Filter输出的数组作为源,你可以通过以下两种方案实现,按需选择:
方案1:适合小数据量(逐条插入)
直接用Foreach活动结合Copy活动实现批量插入:
- 配置Foreach活动的
Items为@activity('Filter1').output.Value - 在Foreach内部添加Copy活动:
- 源:选择Inline数据集,类型选JSON,内容填写
@item() - 接收器:配置你的SQL Server数据集,写入模式选择Append
- 源:选择Inline数据集,类型选JSON,内容填写
- 注意:如果数据量较大,可开启Foreach的Parallel execution(默认并行,最多20并发)提升插入效率
方案2:适合大数据量(临时文件中转)
通过临时存储中转过滤后的数据,再批量写入SQL Server:
- 创建临时存储:用Azure Blob Storage(或ADLS Gen2)创建一个临时容器,用于存放过滤后的JSON文件
- 添加变量:创建一个字符串类型的变量(比如
filteredJsonStr) - Set Variable活动:将Filter的输出数组转为JSON字符串,表达式:
@string(activity('Filter1').output.Value) - 第一个Copy活动(写入临时文件):
- 源:选择Inline数据集,类型选JSON,内容填写
@variables('filteredJsonStr') - 接收器:选择你的Blob数据集,指定临时文件路径(比如
temp/filtered_data.json)
- 源:选择Inline数据集,类型选JSON,内容填写
- 第二个Copy活动(写入SQL Server):
- 源:选择刚才的Blob数据集,指向临时JSON文件
- 接收器:配置你的SQL Server数据集,设置好表字段映射,写入模式选Append或Upsert(根据需求)
- (可选)Delete活动:在最后删除临时Blob文件,避免存储冗余
关键注意点
- Lookup活动默认最多返回5000条记录,如果你的CSV数据超过这个数量,需要在Lookup活动的设置里修改Maximum rows count(最大可设为100000)
- 用临时文件中转时,确保Blob容器的权限配置正确,ADF具备读写权限
- 如果用Foreach方案,SQL Server的表要允许批量插入,避免单条插入导致性能问题
内容的提问来源于stack exchange,提问作者Tarun Sahu
相关产品推荐
相关产品推荐

