将bigquery数据导出到云存储,整数字段变为字符串格式,但float格式保持为数字格式

时间:2017-04-24 20:54:44

标签: google-bigquery google-cloud-storage

我有这些大问题领域

views   INTEGER NULLABLE    
comments    INTEGER NULLABLE    
shares  INTEGER NULLABLE    
watch_time_minutes  FLOAT   NULLABLE    

观看评论分享watch_time_minutes 0 0 1 0.0

我通过BigQuery控制台页面(简称"导出表格")将这个bigquery数据导出到云存储(json格式),我得到的是

{"views":"0","comments":"0","shares":"1","watch_time_minutes":0}

注意在这个json记录中,Integer字段已更改为字符串值,     "视图":" 0""注释":" 0""股":" 1& #34;

但浮点字段保持为数字格式     " watch_time_minutes":0

Json中的整数字段应保持为

的数字格式
"views":0,"comments":0,"shares":1

否则,在以下过程中,当我对这些应该是整数字段进行数学运算时(但在json中没有显示为字符串),我会遇到问题。

任何建议?

现在,我有一个解决方案是循环(数百万行)存储文件并将所有整数字段转换回整数。但它超越了性能优势,只需通过一个声明将bigquery表导出到存储中。"

我有另一个丑陋的解决方案是"将整数字段重新定义为float"但这真的很难看,以后会引起其他问题。比如我无法将观看次数显示为0.0时间。等

谢谢!

1 个答案:

答案 0 :(得分:3)

此问题已在问题跟踪器上报告了几次,例如Json exports on BQ is exported incorrectly。从关于该问题的最后评论:

  

原因是大多数JSON解析器仅支持32位整数,   而BQ整数有64位。您可以使用中的字段类型   结果来确定如何解析JSON,或者如果你想要JSON   使用数字而不是字符串,您可以在查询中强制转换列   到FLOAT(遗留SQL)或FLOAT64(标准SQL)。请注意,此选项   然而,可能会失去精确度。

     

或者,您可以使用支持64位整数的Avro格式。