BigQuery 中 JSON_EXTRACT 和 JSON_QUERY 的区别

Posted

技术标签:

【中文标题】BigQuery 中 JSON_EXTRACT 和 JSON_QUERY 的区别【英文标题】:Different between JSON_EXTRACT and JSON_QUERY in BigQuery 【发布时间】:2020-08-11 06:03:37 【问题描述】:

我想知道 JSON_EXTRACT 和 JSON_QUERY 之间有什么区别。 在Bigquery document 中,他们两个共享相同的解释和示例。

【问题讨论】:

【参考方案1】:

JSON_QUERY() 是后来添加的,以符合 ISO/IEC TR 19075-6:2017 中出现的 JSON 路径的 SQL 标准 2016 版本。

JSON_EXTRACT 和 JSON_QUERY 的区别在于如何处理带有点的字段名称,请参见下面的示例

WITH data AS (SELECT """

  "a.x" :  "b" : "c" 

""" json)
SELECT JSON_QUERY(json, '$."a.x"'), JSON_EXTRACT(json, "$['a.x']")
FROM data;

输出:

+-----------+-----------+
|    f0_    |    f1_    |
+-----------+-----------+
| "b":"c" | "b":"c" |
+-----------+-----------+

【讨论】:

这是因为JSON_VALUE 等价于JSON_EXTRACT_SCALARJSON_QUERY 等价于JSON_EXTRACT。因此,如果您比较相关的配对结果将是相同的。我觉得问题实际上是关于这两对之间有什么区别 - JSON_VALUEJSON_QUERYJSON_EXTRACT_SCALARJSON_EXTRACT?如果这两个新功能与早已存在的功能完全相同,为什么还要引入它们? 你很了解我 :) 这正是我的问题,如果这两个新功能与早已存在的功能完全相同,为什么还要引入它们? 糟糕...我误读了这个问题。更新了我的答案(答案中的内容也应该在公共文档中,我会研究它应该如何更新)

以上是关于BigQuery 中 JSON_EXTRACT 和 JSON_QUERY 的区别的主要内容,如果未能解决你的问题,请参考以下文章

BigQuery 标准 SQL 中的 JSON_EXTRACT?

JSON_EXTRACT 不适用于 BigQuery 中的布尔值

BigQuery - JSON_EXTRACT 仅提取第一个条目

将使用 JSON_EXTRACT 的查询从 MySQL 转换为 BigQuery

我想用 BigQuery 提取 Json 格式的数据。 UDF 或 json_extract

如何使用 JSON_EXTRACT 或 JSON_EXTRACT_SCALAR 在 Big Query 中读取多级 JSON 数据