导出到JSON时如何保留整数数据类型?

时间:2015-09-08 16:38:52

标签: json google-bigquery

当我以JSON格式导出我的bigquery表时,INTEGER字段将转换为字符串。导出时有没有办法维护整数数据类型?

以下是重现整数 - >字符串转换现象的最小步骤:

  1. 运行查询SELECT INTEGER(1) AS myInt并将结果保存到表中。请注意,输出表架构将类型显示为INTEGER
  2. 以JSON格式导出表格。输出将是:{"myInt":"1"}
  3. 以JSON格式"1" is a string,而不是整数。

1 个答案:

答案 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上提交一个错误来解决这个问题吗? (它可能涉及导出配置中的另一个标志)。