问题描述
我在 BigQuery 表中有如下数据:
[
{ "id": 1,"labels": [{"key": "a","value": 1},{"key": "b","value": 2}] },{ "id": 2,"value": 3}] },// a lot more rows
]
我的问题是,如何找到所有包含 "key" = "a"
、"value" = 1
以及 "key" = "b"
和 "value" = 3
的行?
我尝试了各种形式的 UNnesT
使用方法,但始终无法正确使用。 CROSS JOIN
为 labels
数组中的每个对象留下一行,使我无法同时查询它们。
解决方法
试试这个:
select *
from mytable
where exists (select 1 from unnest(labels) where key = "a" and value=1)
and exists (select 1 from unnest(labels) where key = "b" and value=3)
,
假设标签数组中没有重复的条目 - 您可以在下面使用
select *
from `project.dataset.table` t
where 2 = (
select count(1)
from t.labels kv
where kv in (('a',1),('b',3))
)
,
您可以尝试解析 JSON,然后您可以根据您的要求对其应用不同的过滤条件,在以下查询中,我尝试确定哪些记录具有 Key=a
,然后我尝试确定哪些记录具有 {{ 1}} 然后通过 value=30
:-
id
希望它对你有用。