【问题标题】:Google Bigquery, WHERE clause based on JSON itemGoogle Bigquery,基于 JSON 项目的 WHERE 子句
【发布时间】:2020-12-21 16:53:37
【问题描述】:

我有一个来自 firestore 数据库的 bigquery 导入,我想在其中查询文档中的特定字段。这是通过 firestore-bigquery 扩展填充的,文档数据存储为 JSON 字符串。

我正在尝试在查询中使用 WHERE 子句,该子句使用 JSON 数据中的一个字段。但是,这似乎不起作用。

我的查询如下:

SELECT json_extract(data,'$.title') as title,p
FROM `table`  
left join unnest(json_extract_array(data, '$.tags')) as p
where json_extract(data,'$.title') = 'technology'

data 是 JSON 对象,title 是所有项目的属性。上面的查询会运行,但会产生“无结果”(肯定有相关标题的结果,因为它们出现在表格预览中)。

我也尝试过使用WHERE title = 'technology',但这会返回一个错误,即title 是一个无法识别的字段(因此是json_extract)。

根据我的研究,这应该可以作为标准 SQL JSON 查询,但似乎不适用于 Bigquery。有谁知道解决这个问题的方法吗?

我能想到的只是如果我将结果放在另一个表中,但我不知道这是否是一个可行的解决方案,因为数据是通过更新时的扩展更新的,所以我需要不断刷新我的第二个桌子也是。

编辑 我想知道配置视图是否会对此有所帮助?虽然最终我想根据不同的参数来查询这个,这里的文档https://cloud.google.com/bigquery/docs/views 建议你不能在视图中引用查询参数

【问题讨论】:

    标签: google-bigquery


    【解决方案1】:

    我已经设法解决了这个问题,并将与其他有同样问题的人分享解决方案。

    解决方案是在 WHERE 子句中使用JSON_VALUE,例如:

    where JSON_VALUE(data,'$.title') = 'technology';
    

    我仍然不确定这在性能和成本方面是否是最好的方法,所以我会等着看是否有其他人给出更好的答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2017-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      相关资源
      最近更新 更多