有没有办法通过数组的内容过滤 BigQuery 中的行?

问题描述

我在 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 JOINlabels 数组中的每个对象留下一行,使我无法同时查询它们。

解决方法

试试这个:

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

希望它对你有用。