Azure Data Factory数据流:大/小数自动转为科学计数法问题求解
解决Azure Data Factory数据流中数值自动转为科学计数法的问题
核心原因
ADF数据流处理嵌套JSON扁平化时,若自动推断数值类型为Double,极大/极小值或0会触发科学计数法展示;使用toDecimal时若小数位设置过多,0值会被格式化为0E10类的科学计数法形式。
可行解决方案
1. 先转字符串再转指定精度Decimal(从根源避免自动类型转换)
从嵌套数组提取元素时,先强制转为字符串类型,再转换为Decimal,避免ADF自动将大数识别为Double:
- 派生列步骤中,先提取字符串形式的数值:
Data_C1_str = toString(Values[6]) - 再转换为指定精度的Decimal(根据实际数据调整精度,整数用
(20,0),带小数用(20,10)):
此方法能确保大数保持原始数字格式,0值会显示为Data_C1_dec = toDecimal(Data_C1_str, 20, 0)0而非科学计数法。
2. 使用formatNumber强制非科学计数法格式化
若已存在Decimal类型的列,直接用formatNumber函数指定输出格式,彻底规避科学计数法:
Data_C1_formatted = formatNumber(Data_C1_dec, '0.##########')
- 格式说明:
0表示必须存在的整数位,##########对应最多10位可选小数(可根据实际需求调整位数); - 效果:大数
2909888293会显示为2909888293,0值显示为0,带小数的数值保留原始小数位。
3. 手动指定投影列类型(避免自动推断错误)
在数据源或扁平化后的投影设置中,手动将目标列的类型设置为Decimal(20,10)(或匹配数据的精度),而非依赖ADF自动推断:
- 进入数据流的投影设置界面;
- 找到目标列,将类型从
Auto改为Decimal,并设置合适的精度和小数位。
注意事项
- 若数据中同时包含整数和小数,可通过
iif函数区分处理:Data_C1_final = iif(contains(Data_C1_str, '.'), formatNumber(toDecimal(Data_C1_str,20,10), '0.##########'), formatNumber(toDecimal(Data_C1_str,20,0), '0')) - 预览时的显示格式若仍有科学计数法,可检查目标存储的类型设置(如SQL Server的decimal类型存储时不会有科学计数法,仅预览界面可能因显示逻辑临时展示)。
内容的提问来源于stack exchange,提问作者user23845834
相关产品推荐
相关产品推荐

