sql - 避免 BigQuery 中 JSON_EXTRACT 函数中的指数表示法

标签 sql json google-bigquery

我正在使用 BigQuery 并在某些字段中存储 JSON 字符串。 在这里,我有一个名为“json”的字段,其中包含如下 JSON 字符串:

{"log_id":939286972300751993,"status":"good"}

并使用下面的sql进行查询:

SELECT json, JSON_EXTRACT(json, "$.log_id") AS log_id
FROM dataset.table;

结果是:

                    json                         |       log_id
-------------------------------------------------+---------------------
{"log_id": 939286972300751993, "status": "good"} | 9.39286972300752e+17

但我期望的是:

                    json                         |       log_id
-------------------------------------------------+---------------------
{"log_id": 939286972300751993, "status": "good"} | 939286972300751993

“log_id”在我的上下文中应被视为整数。 有没有办法避免 JSON_EXTRACT 函数将大整数替换为指数表示法?

最佳答案

您可以在查询本身中将结果转换为 INTEGER。

SELECT json, INTEGER(JSON_EXTRACT(json, "$.log_id")) AS log_id
FROM dataset.table;

正如您问题的评论中所指出的,在 JSON 中存储大量数字可能会导致您失去任何超过 2^53 的数字的精度(在 http://rfc7159.net/rfc7159 中搜索“数字”)。如果发生这种情况,JSON 解析库本身就会丢失精度,因此在查询中的其他位置转换为 INTEGER(或进行一些 API 级别的更改)将无济于事。

关于sql - 避免 BigQuery 中 JSON_EXTRACT 函数中的指数表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33278846/

相关文章:

sql - 无法将类型记录转换为整数

google-bigquery - 在 BigQuery 中,如何计算列上的更改数量

python - Bigquery 异步作业与批量查询有何不同?

sql - T-SQL 中的动态 WHERE 子句

mysql - SQL 按日期降序排序表达式

mysql - 消息系统查询不起作用

ios - 使用 swiftlyJSON 在 Swift 中解析具有未知根元素的 JSON

javascript - 如何从本地存储重新加载 jstree?

java - 获取 POST 的 jSON 响应

google-bigquery - 在 BigQuery 中输出嵌套结果