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

Bry*_*yan 7 json google-bigquery

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

以下是重现integer-> string转换现象的最小步骤:

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

在JSON格式中,"1" 是一个字符串,而不是整数.

Jor*_*ani 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 问题跟踪器中提交错误来解决此问题吗?(它可能涉及导出配置中的另一个标志).