将大查询数据导出到云存储,整数字段更改为字符串格式,但浮点格式保持为数字格式
Posted
技术标签:
【中文标题】将大查询数据导出到云存储,整数字段更改为字符串格式,但浮点格式保持为数字格式【英文标题】:export bigquery data to cloud storage, the integer field changs to string format but float format stays as numeric format 【发布时间】:2017-04-24 20:54:43 【问题描述】:我有这些大查询字段
views INTEGER NULLABLE
comments INTEGER NULLABLE
shares INTEGER NULLABLE
watch_time_minutes FLOAT NULLABLE
查看 cmets 分享 watch_time_minutes 0 0 1 0.0
我通过 BigQuery 控制台页面(简称“导出表”)将这个 bigquery 数据导出到云存储(json 格式),我得到的是
"views":"0","comments":"0","shares":"1","watch_time_minutes":0
注意在这个 json 记录中,整数字段更改为字符串值, "views":"0","cmets":"0","shares":"1"
但浮点字段保持为数字格式 “watch_time_minutes”:0
Json 中的整数字段应保持为数字格式
"views":0,"comments":0,"shares":1
否则,在接下来的过程中,当我对这些应该是整数字段(但在 json 中没有显示为字符串)进行数学运算时,我会遇到问题。
有什么建议吗?
现在,我有一个解决方案是循环遍历(数百万行)存储文件并将所有整数字段转换回整数。但它击败了“只需一条语句将 bigquery 表导出到存储”的性能优势。
我有另一个丑陋的解决方案是“将整数字段重新定义为浮点数”,但这真的很丑陋,以后会导致其他问题。比如我无法将浏览次数显示为 0.0 次。等等
谢谢!
【问题讨论】:
【参考方案1】:这已在问题跟踪器上报告了几次,例如Json exports on BQ is exported incorrectly。从关于该问题的最后评论:
原因是大多数 JSON 解析器只支持 32 位整数, 而 BQ 整数有 64 位。您可以使用字段类型 结果来确定如何解析 JSON,或者是否希望 JSON 使用数字而不是字符串,您可以在查询中转换列 到 FLOAT(旧版 SQL)或 FLOAT64(标准 SQL)。注意这个选项 但是,可能会失去精度。
或者,您可以使用支持 64 位整数的 Avro 格式。
【讨论】:
以上是关于将大查询数据导出到云存储,整数字段更改为字符串格式,但浮点格式保持为数字格式的主要内容,如果未能解决你的问题,请参考以下文章