当我以JSON格式导出我的bigquery表时,INTEGER
字段将转换为字符串。导出时有没有办法维护整数数据类型?
以下是重现整数 - >字符串转换现象的最小步骤:
SELECT INTEGER(1) AS myInt
并将结果保存到表中。请注意,输出表架构将类型显示为INTEGER
。{"myInt":"1"}
以JSON格式"1"
is a string,而不是整数。
答案 0 :(得分:7)
目前无法做到这一点;推理是因为Javascript规范,IEEE浮点精度,JSON和BigQuery整数大小的不幸组合。
在Javascript中,所有数字必须可表示为IEEE754双精度浮点值。 Javascript将JSON数字解析为javascript数字。 BigQuery使用64位有符号整数值。
问题出现是因为并非所有64位整数值都可以表示为IEEE 754双精度浮点值。 (很容易理解为什么:IEEE 754双精度浮点使用64位但可以代表许多不是整数的东西;因此,必须有64位整数,它不能代表)。
因此,为了使BigQuery JSON响应在Javascript中工作,整数值用引号括起来,这样就不会丢失精度。
那就是说......在API请求中将整数表示为字符串的决定是有道理的,因为API的许多调用者都是javascript。在导出数据时,似乎没有引人注目的参数表示不将整数表示为数字。 (除了现在改变它将是一个突破性的变化)。
你可以在BigQuery issue tracker上提交一个错误来解决这个问题吗? (它可能涉及导出配置中的另一个标志)。