如何在BigQuery中使用IN运算符搜索多个匹配项?

时间:2018-12-18 14:33:59

标签: google-bigquery

enter image description here 现在,我正在使用WHERE运算符和2个条件语句来过滤行。我编写2个条件似乎效率低下。仅通过写一条语句就能检查“ amznbida”和“ ksga”是否在数组中吗?

standardSQL

  -- Get all the keys

SELECT 
  *

FROM `encoded-victory-198215.DFP_TEST.test3`

WHERE 

  "amznbida" IN UNNEST(ARRAY(SELECT name FROM UNNEST(keywords)))

AND 

  "ksga"IN UNNEST(ARRAY(SELECT name FROM UNNEST(keywords)))

2 个答案:

答案 0 :(得分:2)

只需删除UNNEST(ARRAY()部分,然后离开子查询-就可以了。 工作示例:

SELECT 
  *,
  t in (select * from unnest(a)) condition
FROM unnest([
    struct('a' as t, ['a', 'b', 'c'] as a),
    ('b',['r', 'f'])
  ])

答案 1 :(得分:1)

以下是用于BigQuery标准SQL

#standardSQL
SELECT *
FROM `encoded-victory-198215.DFP_TEST.test3`
WHERE 2 = (SELECT COUNT(DISTINCT name) FROM UNNEST(keywords) WHERE name IN ("amznbida", "ksga"))  

您可以使用以下虚拟数据进行测试,玩

#standardSQL
WITH `encoded-victory-198215.DFP_TEST.test3` AS (
  SELECT 
    ARRAY<STRUCT<value ARRAY<STRING>, name STRING>>[
      STRUCT(['ksg-1', 'ksg-2'], 'ksga'), STRUCT(['amznbid-1', 'amznbid-2'], 'amznbida')
    ] keywords,
    1 impression UNION ALL
  SELECT 
    ARRAY<STRUCT<value ARRAY<STRING>, name STRING>>[
      STRUCT(['xxx-1', 'xxx-2'], 'xxxa'), STRUCT(['amznbid-1', 'amznbid-2'], 'amznbida')
    ] keywords,
    2 impression 
)
SELECT *
FROM `encoded-victory-198215.DFP_TEST.test3`
WHERE 2 = (SELECT COUNT(DISTINCT name) FROM UNNEST(keywords) WHERE name IN ("amznbida", "ksga"))   

有结果

Row keywords.value  keywords.name   impression   
1   ksg-1           ksga            1    
    ksg-2            
    amznbid-1       amznbida         
    amznbid-2