如何用Synapse Analytics管道预复制脚本将Blob数据追加至SQL表
解决Synapse Copy Data活动追加Blob数据到SQL表的问题
错误原因分析
- 使用
TRUNCATE TABLE a.Table作为预复制脚本会清空表数据,这是TRUNCATE的固有行为,完全不符合追加需求。 INSERT INTO a.Table SELECT * FROM folder/x.csv报错是因为预复制脚本是在SQL端执行的纯SQL语句,SQL Server/Synapse SQL无法直接通过这种语法读取Blob存储中的CSV文件,语法不兼容导致解析错误(错误码103010)。
正确实现方式(无需预复制脚本)
Synapse的Copy Data活动本身原生支持追加写入,根本不需要自定义预复制脚本:
- 打开Copy Data活动的Sink配置选项卡
- 在Write behavior(写入行为)下拉列表中,选择
Append(针对Synapse SQL池,选项名称可能显示为Append to existing table) - 确认源Blob文件和目标SQL表的列映射完全匹配,数据类型兼容
- 保存并运行管道,即可将Blob文件的数据追加到现有SQL表,完全保留原有数据
特殊场景的预复制脚本(可选)
如果需要在追加前做预处理(比如删除目标表中与待导入数据重复的记录),可以编写针对性的SQL作为预复制脚本,例如:
-- 假设用ID列去重,需提前配置Blob外部数据源 DELETE FROM a.Table WHERE ID IN (SELECT ID FROM OPENROWSET( BULK 'folder/x.csv', DATA_SOURCE = 'YourBlobDataSource', FORMAT = 'CSV' ) AS SourceData)
注:使用
OPENROWSET需要先在Synapse SQL池中配置外部数据源和外部文件格式,仅适用于Synapse SQL池场景。
内容的提问来源于stack exchange,提问作者Eli
相关产品推荐
相关产品推荐

