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

How to preserve integer data type when exporting to JSON?

当我以 JSON 格式导出我的 bigquery tables 时,INTEGER 字段被转换为字符串。有没有办法在导出时保持整型数据类型?

重现整数->字符串转换现象的最少步骤如下:

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

在JSON格式中,"1"is a string,不是整数。

这目前不可能;推理是因为 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 上提交错误来解决这个问题吗? (它可能会在导出配置中涉及另一个标志)。