导出为 JSON 时如何保留整数数据类型?
Posted
技术标签:
【中文标题】导出为 JSON 时如何保留整数数据类型?【英文标题】:How to preserve integer data type when exporting to JSON? 【发布时间】:2015-12-04 10:40:42 【问题描述】:当我以 JSON 格式导出我的 bigquery 表时,INTEGER
字段将转换为字符串。导出时有什么方法可以保持整数数据类型吗?
这里是重现整数->字符串转换现象的最小步骤:
-
运行查询
SELECT INTEGER(1) AS myInt
并将结果保存到表中。请注意,输出表架构将类型显示为INTEGER
。
以 JSON 格式导出表格。输出将是:"myInt":"1"
JSON 格式,"1"
is a string,不是整数。
【问题讨论】:
【参考方案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以上是关于导出为 JSON 时如何保留整数数据类型?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 pandas 数据框导出为 json 并保留原始日期时间格式?
如何使用 EMR 上的 HiveQL 将 DynamoDB 上的 Map 数据类型列导出到具有 JSON 数据类型的 S3?