You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

从BigQuery导出Parquet后BIGNUMERIC转FLOAT32的问题排查

BigQuery BIGNUMERIC导出Parquet后的读取问题解析

问题本质

BigQuery的BIGNUMERIC类型支持77位精度,但主流Parquet读取库(fastparquet、pyarrow)对decimal类型的精度支持均达不到该标准,因此引发不同异常。

1. fastparquet读取数值失真的原因

fastparquet未适配77位精度的decimal类型,会默认将其降级转换为FLOAT32。而FLOAT32仅能保证约6-7位有效数字,完全无法存储77位的超大数值,直接导致数值溢出失真,出现你看到的错误结果。这是fastparquet的兼容性缺陷。

2. pyarrow报错的原因

pyarrow对decimal类型的精度限制为1到76位,BigQuery导出的BIGNUMERIC精度刚好超出这个范围,因此触发ArrowInvalid: Decimal precision out of range [1, 76]: 77错误。这是pyarrow当前的设计上限导致的。

可行的临时解决方案

  • 导出前转字符串:在BigQuery中用CAST(your_bignumeric_col AS STRING)将BIGNUMERIC列转为字符串后再导出,读取到Pandas后,再用pd.to_numeric()配合decimal=True参数转换为Decimal类型,可完整保留原始数值。
  • 降低精度导出:如果业务场景允许,将BIGNUMERIC列转换为精度≤76位的NUMERIC类型(CAST(your_bignumeric_col AS NUMERIC))后再导出,这样pyarrow和fastparquet都能正常解析为Decimal类型。

内容的提问来源于stack exchange,提问作者ly nguyen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 21:52:32