如何通过ADF将SQL Server表中XML列的文档迁移至Azure Blob存储
使用Azure Data Factory把SQL Server XML列数据迁移到Azure Blob Storage
1. 先搞定数据源(SQL Server)
- 在ADF里新建链接服务,选SQL Server类型,填好服务器名、数据库名,选合适的认证方式(SQL认证或者AD认证都行),测试连接通了再下一步。
- 创建数据集,关联刚才的链接服务,选中你存XML列的那张表,记好XML列的名字(比如
XmlContent)。
2. 配置目标端(Azure Blob Storage)
- 新建Blob Storage的链接服务,选对应的存储账户,测试连接确保没问题。
- 创建数据集,选Blob类型,指定存储容器和文件夹路径,文件格式选Text Format(毕竟要导出纯XML内容),文件名可以用动态内容生成,比如
@concat('xml_', pipeline().RunId, '.xml'),或者后面按行生成单个文件的时候再改。
3. 搭数据流水线
方案A:导出成单个XML文件
如果要把所有行的XML内容合并到一个文件:
- 加个复制活动,源选SQL Server数据集,自定义SQL查询只拿XML列:
注意:ADF默认会把XML当字符串导出,只要映射对了,目标文件就是纯XML内容。SELECT XmlContent FROM YourTableName - 目标选Blob数据集,去复制活动的映射标签,确认XML列和目标文件的内容字段对应上。
方案B:每行生成单独的XML文件
要是需要每行的XML列存成单独文件:
- 加个查找活动,源是SQL Server数据集,写查询把每行的唯一标识(比如ID)和XML内容都拿出来:
SELECT Id, XmlContent FROM YourTableName - 加个For Each活动,遍历查找活动的输出,表达式填:
@activity('LookupXMLData').output.value - 在For Each里面嵌套复制活动:
- 源选Inline Dataset(临时数据集),类型是SQL Server,查询过滤当前行:
SELECT XmlContent FROM YourTableName WHERE Id = @item().Id - 目标Blob数据集的文件名设成动态内容:
@concat('xml_file_', @item().Id, '.xml') - 复制活动的行为按需选“覆盖”或者“追加”就行。
- 源选Inline Dataset(临时数据集),类型是SQL Server,查询过滤当前行:
4. 测试跑起来
- 先调试流水线,看看Blob里生成的文件对不对,XML内容有没有损坏、缺漏。
- 没问题的话,设置触发器(按需手动跑或者定时调度)就行。
踩坑提醒
- 如果XML内容特别大,记得分批次处理,别把内存撑爆了。
- 确保SQL Server和Blob Storage能连通,比如用VNet集成或者开公网访问权限。
- 要是XML列有特殊字符,确认ADF的编码是UTF-8(默认就是,一般没问题)。
内容的提问来源于stack exchange,提问作者Ally
相关产品推荐
相关产品推荐

