我有一个来自 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'
Run Code Online (Sandbox Code Playgroud)
data是 JSON 对象,title是所有项目的属性。上面的查询将运行,但会产生“无结果”(当它们出现在表格预览中时,肯定有相关标题的结果)。
我也尝试过使用WHERE title = 'technology',但这会返回一个错误,该错误title是一个无法识别的字段(因此是 json_extract)。
根据我的研究,这应该可以作为标准的 SQL JSON 查询,但似乎不适用于 Bigquery。有谁知道解决这个问题的方法?
我能想到的是,如果我将结果放在另一个表中,但我不知道这是否是一个可行的解决方案,因为数据是通过更新时的扩展更新的,所以我也需要不断刷新我的第二个表.
编辑 我想知道配置视图是否有助于解决这个问题?虽然最终我想根据不同的参数查询这个,这里的文档https://cloud.google.com/bigquery/docs/views建议你不能在视图中引用查询参数
从那以后,我设法解决了这个问题,并将与其他遇到相同问题的人分享解决方案。
解决方案是JSON_VALUE在 WHERE 子句中使用,例如:
where JSON_VALUE(data,'$.title') = 'technology';
Run Code Online (Sandbox Code Playgroud)
我仍然不确定这是否是在性能和成本方面做到这一点的最佳方式,所以我会等着看是否有人留下更好的答案。
| 归档时间: |
|
| 查看次数: |
295 次 |
| 最近记录: |