【发布时间】:2022-01-20 03:44:42
【问题描述】:
我在使用 bq 加载作业或通过 apache-spark 数据帧从 BigQuery 中的 AVRO/Parquet 文件加载数据时遇到了一个奇怪的问题。
源文件具有值为 22.54 的浮点数据类型,但在将其加载到 BigQuery 后,它会自动更改为 22.540000915527344。
我尝试使用其他文件格式并直接使用 bq 加载作业和使用 spark 数据帧,但问题仍然存在。
我在加载后添加了 AVRO 文件数据和 BigQuery 数据的详细信息。
如果您遇到此问题,请告诉我并帮助我解决此问题。
下面提供了 AVRO 架构:
{
"type" : "record",
"name" : "topLevelRecord",
"fields" : [ {
"name" : "id",
"type" : "int"
}, {
"name" : "cp",
"type" : "float"
} ]
}
AVRO 数据:
| id | cp |
|-----|-----|
| 1 |22.54|
BigQuery 数据:
| id | cp |
|-----|------------------|
| 1 |22.540000915527344|
【问题讨论】:
-
在插入表格之前,您是否尝试过对值进行四舍五入,即:
ROUND(val, 2)?如果在插入数据集表之前对值进行四舍五入,即使列是 FLOAT64,您也应该能够保留 2 位小数。 -
如果您使用的是传输作业,您可以将小数类型设置为 2。
标签: apache-spark google-cloud-platform google-bigquery avro parquet