如何使用Azure Data Factory替换Azure SQL Database中的数据
Azure Data Factory 全量覆盖同步Azure SQL Database解决方案
以下是三种可落地的全量替换配置方案,可根据你的场景选择:
方案1:使用复制活动内置预复制脚本(最简单快捷)
- 打开你现有Blob同步到Azure SQL的管道编辑页,选中对应的复制活动
- 切换到接收器配置标签页
- 找到预复制脚本输入框,填入语句:
TRUNCATE TABLE [你的目标表完整名称]若目标表存在外键约束无法执行TRUNCATE,可替换为
DELETE FROM [你的目标表完整名称],TRUNCATE执行效率更高、几乎不占用事务日志空间,优先选择 - 保存管道后重新触发运行即可,每次复制活动执行写入前会自动清空原有表数据,再写入本次的全量新数据,不会再产生追加重复数据
方案2:事务封装写入(适配需要数据高一致性的场景)
该方案可以避免清空表后写入失败导致目标表无数据的问题:
- 首先在你的Azure SQL Database中创建存储过程,示例代码如下:
CREATE PROCEDURE FullDataReplace AS BEGIN SET NOCOUNT ON; BEGIN TRANSACTION -- 清空目标表旧数据 TRUNCATE TABLE [目标表名]; -- 从临时表写入新的全量数据 INSERT INTO [目标表名] SELECT * FROM [同步临时表名]; COMMIT TRANSACTION END
- 调整原有复制活动的写入目标为提前创建的临时表(结构和目标表完全一致)
- 在复制活动后新增一个存储过程活动,关联上述创建的
FullDataReplace存储过程 - 每次管道运行时会先把新数据写入临时表,确认写入成功后再原子执行清空+替换操作,不会出现目标表空数据的中间状态
方案3:分区切换(适配超大数据量同步场景)
如果单表数据量超过100G,推荐用该方案实现毫秒级切换无 downtime:
- 提前创建和目标表结构、索引完全一致的备用空表
- 每次管道运行时把Blob的全量新数据写入备用表
- 写入完成后执行切换语句:
ALTER TABLE [备用表名] SWITCH TO [目标表名] - 最后清空备用表留作下次同步使用即可
紧急空间处理操作
你当前Azure SQL存储空间耗尽,可以先手动执行TRUNCATE TABLE [你的目标表名]清空之前重复追加的冗余数据,释放存储空间后再调整管道配置。
内容的提问来源于stack exchange,提问作者Khutso Mphelo
相关产品推荐
相关产品推荐

