我从bigquery导出了一个表,遇到了一个问题,有一个列的类型是BIGNUMERIC
,在使用fastparquet导出并读取pandas后,该列的数据类型从BIGNUMERIC
变为FLOAT32
。例如:原始值为9500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
这是因为从bigquery导出到parquet文件吗?还是fastparquet库出错了?
我尝试使用Pyarrow代替,但另一个错误是:ArrowInvalid: Decimal precision out of range [1, 76]: 77
1条答案
按热度按时间hts6caw31#
BigQuery的Bignumeric数据类型在技术上允许部分第77位数字,这就是为什么parquet导出将精度设置为77的原因。Fastparquet文档指出,更大精度的十进制类型将溢出,并且bignumeric的精度/小数位数远远超出浮点值的范围。正如Arrow的错误消息所示,它不支持部分第77位数字。如果您不需要部分第77位数字,则允许通过箭头读取字段的一种解决方法是在BigQuery架构上指定类型参数。或者通过如果没有值依赖于第77个部分数字,BigQuery存储API应该可以工作