Azure Data Factory V2写入Parquet Decimal类型报错求助
解决Azure Data Factory V2中SQL Decimal类型写入Parquet的报错问题
这个问题我之前在处理ADF的Parquet输出时也碰到过,核心原因是Parquet作为强类型的列式存储格式,对Decimal类型的元数据要求非常严格——当源列存在NULL值或者精度超出ADF自动推断的范围时,就会出现这种精度/刻度缺失的报错。下面是几个经过验证的解决方案:
1. 手动指定Parquet数据集的列架构
不要依赖ADF自动推断的架构(尤其是当列包含NULL值时,自动推断会丢失Decimal的精度和刻度信息),你需要手动定义目标列的类型:
- 打开你的Parquet数据集,切换到架构标签
- 找到
ADDRESSLONGITUDE列,将类型设置为Decimal,手动填写精度32和刻度6 - 保存数据集后重新运行复制活动
2. 处理源数据中的NULL值
报错里提到的Object cannot be cast from DBNull to other types,说明源列存在NULL值,这会干扰ADF对列类型的推断。你可以在源查询中提前处理NULL:
SELECT ISNULL([ADDRESSLONGITUDE], 0.000000) AS [ADDRESSLONGITUDE] FROM [dbo].[MyTable]
这样既避免了DBNull转换的问题,也能让ADF明确识别列的精度和刻度。
3. 确认复制活动的类型映射
在复制活动的映射标签中,确保源列(numeric(32,6))和目标Parquet列(Decimal(32,6))的类型映射完全匹配,不要使用自动映射的默认设置,手动确认每一项的类型对应关系。
为什么CSV格式可以正常运行?
CSV是无类型的文本格式,它不需要存储严格的类型元数据,NULL值会直接输出为空字符串,所以不会触发Parquet那种对Decimal精度/刻度的校验逻辑,因此可以顺利执行。
内容的提问来源于stack exchange,提问作者Fabrice Michellonet
相关产品推荐
相关产品推荐

