sea*_*ain 3 google-cloud-storage google-bigquery
我有这些 bigquery 字段
views INTEGER NULLABLE
comments INTEGER NULLABLE
shares INTEGER NULLABLE
watch_time_minutes FLOAT NULLABLE
Run Code Online (Sandbox Code Playgroud)
观看次数 评论 分享 watch_time_minutes 0 0 1 0.0
我通过BigQuery控制台页面(简称“导出表”)将此bigquery数据导出到云存储(json格式),我得到的是
{"views":"0","comments":"0","shares":"1","watch_time_minutes":0}
Run Code Online (Sandbox Code Playgroud)
请注意,在此 json 记录中,整数字段更改为字符串值,"views":"0","comments":"0","shares":"1"
但浮点字段保持数字格式“watch_time_months”:0
Json 中的整数字段应保持数字格式,如下所示
"views":0,"comments":0,"shares":1
Run Code Online (Sandbox Code Playgroud)
否则,在接下来的过程中,当我对这些应该是整数字段(但不显示为 json 中的字符串)进行数学运算时,我会遇到问题。
有什么建议吗?
现在,我的一个解决方案是循环访问(数百万行)存储文件并将所有整数字段转换回整数。但它击败了“只需通过一条语句将bigquery表导出到存储”的性能优势。
我有另一个丑陋的解决方案,即“将整数字段重新定义为浮点数”,但这真的很丑陋,并且稍后会导致其他问题。例如我无法将浏览次数显示为 0.0 次。ETC。
谢谢!
问题跟踪器已多次报告此问题,例如BQ 上的 Json 导出导出不正确。来自对该问题的最后评论:
原因是大多数 JSON 解析器仅支持 32 位整数,而 BQ 整数有 64 位。您可以使用结果中的字段类型来确定如何解析 JSON,或者如果您希望 JSON 使用数字而不是字符串,则可以将查询中的列转换为 FLOAT(旧版 SQL)或 FLOAT64(标准 SQL) 。但请注意,此选项可能会失去精度。
或者,您可以使用支持 64 位整数的 Avro 格式。