如何使用“bq load”在 BigQuery 中存储超过 9 个高精度小数?
Posted
技术标签:
【中文标题】如何使用“bq load”在 BigQuery 中存储超过 9 个高精度小数?【英文标题】:How to store more than 9 high-precision decimals in BigQuery with `bq load`? 【发布时间】:2021-11-05 02:53:43 【问题描述】:我正在尝试将 bq load
以换行符分隔的 geojson 文件放入 BigQuery。它工作正常(即使geometry
值工作正常!)除非尝试使用超过 9 位小数的高精度数字。根据文档,"ShapeSTArea": 20263.3349609375
等键:值不会存储为 NUMERIC
,但也不会存储为 STRING
。
在我的架构中,首先我尝试了 NUMERIC
类型,但我得到了
- query: Invalid NUMERIC value: 20263.3349609375 Field: ShapeSTArea;
Value: 20263.3349609375
这让我很困惑,但后来我记得NUMERIC
不能代表超过 9 位小数。而且我不能使用低精度的FLOAT64
,原因很明显。然后我将架构类型更改为STRING
并得到了
- Error while reading data, error message: JSON parsing error in row
starting at position 0: Could not convert value to string. Field:
ShapeSTArea; Value: 20263.3349609375
所以我有两个问题:
-
为什么不能将像
20263.3349609375
这样的值存储为 STRING
?
我应该如何使用 bq load
将这些高精度数字存储在 bigquery 中(不使用数据流或其他脚本)?
【问题讨论】:
【参考方案1】:请将有关将浮点 JSON 值存储到 STRING 表列中的问题报告给 BigQuery - https://cloud.google.com/support/docs/issue-trackers。我认为这应该可行。
您应该能够将此值存储在FLOAT64
中而不会丢失数据,FLOAT64
具有足够的精度来存储 15 位十进制数字。 JSON 浮点值通常为 64 位。
或者,您可以使用比 Numeric 精度更高的 BigNumeric 类型:https://cloud.google.com/bigquery/docs/reference/standard-sql/data-types#decimal_types
【讨论】:
以上是关于如何使用“bq load”在 BigQuery 中存储超过 9 个高精度小数?的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 上使用 bq load 和 python 子进程分隔的加载管道
如何使用 Bigquery 在 Google Bigquery 中进行身份验证,而无需使用服务帐户进行用户输入