【问题标题】:How to preserve integer data type when exporting to JSON?导出为 JSON 时如何保留整数数据类型?
【发布时间】:2015-12-04 10:40:42
【问题描述】:

当我以 JSON 格式导出我的 bigquery 表时,INTEGER 字段将转换为字符串。导出时有什么方法可以保持整数数据类型吗?

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

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

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

【问题讨论】:

    标签: json google-bigquery


    【解决方案1】:

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

    【讨论】:

    • 已提交问题。非常感谢您的回答和额外的上下文。
    • (我看到问题已解决,无法解决,BigQuery 团队正在进行内部讨论)
    • 很沮丧,这被拒绝了。我精心设计了我的查询以返回我们系统期望的 JSON,现在我发现它不会因为这个问题而解码......(相关问题是 code.google.com/p/google-bigquery/issues/detail?id=31
    • 我还是讨厌这个。恨恨恨。问题是 code.google.com/p/google-bigquery/issues/detail?id=317
    猜你喜欢
    • 1970-01-01
    • 2015-08-31
    • 2018-05-21
    • 1970-01-01
    • 2021-06-02
    • 2023-04-04
    • 2015-02-04
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多