Azure Data Factory读取JSON文件报错:解析/编码/多行问题求助
解决Azure Data Factory JSON解析错误及ADLS Gen2到Azure SQL DB迁移指南
一、JSON解析错误的具体解决步骤
根据你更新的信息,问题根源是UTF-8-BOM编码和JSON中含有的$特殊字符,按以下步骤处理:
指定正确的文件编码
在ADF的Source配置中,进入「Source options」→「Encoding」下拉框,选择「UTF-8-BOM」(匹配你的文件编码)。之前只启用了「Single document」但未指定对应编码,导致ADF无法正确解析文件头的BOM标记。处理含
$的字段
SQL Server的列名不允许包含$符号,所以需要在转换阶段重命名这类字段:- 如果用Copy Activity:在「Mapping」tab下,将
_id.$oid这类字段的目标列名修改为合法名称(比如oid或id_oid)。 - 如果用数据流:添加「Derived Column」活动,用表达式创建新字段(例如
oid = _id.$oid),然后丢弃原_id字段。
- 如果用Copy Activity:在「Mapping」tab下,将
验证数据预览
修改配置后重新预览数据,确认JSON解析错误消失,字段能正常加载。
二、ADLS Gen2 JSON到Azure SQL DB的完整迁移教程
下面是一套无需第三方工具的实操流程:
配置链接服务
- 创建ADLS Gen2链接服务:选择「Azure Data Lake Storage Gen2」类型,配置存储账户信息,测试连接确保成功。
- 创建Azure SQL DB链接服务:选择「Azure SQL Database」类型,输入服务器、数据库名及认证信息(SQL认证或MSI),测试连接。
构建迁移管道(Copy Activity 版本,适合简单场景)
- 添加Copy Activity到管道,命名为
Copy_JSON_to_SQL。 - Source配置:选择ADLS Gen2链接服务,指定JSON文件路径;在「JSON settings」中勾选「Single document」;在「Source options」的「Encoding」中选择「UTF-8-BOM」。
- Sink配置:选择Azure SQL DB链接服务,指定目标表(可选择「自动创建表」让ADF根据JSON结构生成表,或提前在SQL DB中建好表结构)。
- 字段映射:在「Mapping」tab中,手动调整字段映射,确保含特殊字符的字段都重命名为SQL合法列名。
- 添加Copy Activity到管道,命名为
构建迁移管道(数据流版本,适合复杂转换)
- 创建新的数据流,添加「Source」活动:连接ADLS Gen2链接服务,选择JSON文件,设置「JSON format」为「Single document」,「Encoding」选「UTF-8-BOM」。
- 添加「Derived Column」活动:重命名含
$的字段,例如创建新字段oid,表达式为_id.$oid;同时可以清理空值、转换数据类型(比如把dimension拆分成宽和高)。 - 添加「Sink」活动:连接Azure SQL DB链接服务,指定目标表,完成字段映射。
- 将数据流添加到管道中,运行测试。
调度与监控
- 为管道设置调度(如每日增量同步),通过ADF的监控面板查看运行状态,排查可能出现的错误。
内容的提问来源于stack exchange,提问作者Matzka
相关产品推荐
相关产品推荐

