如何使用 BigQuery legacy sql 查询多个值的相同重复字符串字段?

How to query same repeated string field for multiple values with BigQuery legacy sql?

我有一个 table t1 结构:

我有多个名称的条目:

我想要 return 具有 name 等于 name1name4[ 的行(唯一) =44=] 这将 return 第 2 行和第 3 行,id 124 和 125

Bigquery 自动扁平化结果。但这很难 return 包含多个

的行

并且由于某些限制,必须使用 LegacySQL 执行此操作。我试过:

SELECT _id AS _id, GROUP_CONCAT_UNQUOTED(name) AS name where name like "%name1%" and name like "%name4%"

也尝试使用 =,但没有用。

还有这一 return 全部行因为 name1:

name IN ("name1", "name4")

( name = "name1" or name = "name4")

must do this with LegacySQL because of some constraints

以下是 BigQuery Legacy SQL

选项 #1

#legacySQL
SELECT id, NEST(name) name
FROM [project:dataset.table] 
GROUP BY id
HAVING SUM(name IN ('name1', 'name4')) = 2

并设置目标 table,没有将 Flatten Results 设置为 false(在 UI 中未选中)

选项 #2

#legacySQL
SELECT id, GROUP_CONCAT(name) name
FROM [project:dataset.table] 
GROUP BY id
HAVING SUM(name IN ('name1', 'name4')) = 2

有结果(假设 table 已经从你的问题中抽取了数据)

Row id  name     
1   124 name1,name3,name4,name5  
2   125 name1,name4,name7    

注意:以上选项假定名称数组中没有重复的名称,这很可能是您的情况

选项 #3 - 这实际上适用于 BigQuery 标准 SQL - 假设你可以将你的东西迁移到标准 SQL

#standardSQL
SELECT id, name
FROM `project.dataset.table`
WHERE 2 = (SELECT COUNT(DISTINCT item) FROM UNNEST(name) item WHERE item IN ('name1','name4'))

结果

Row id  name     
1   124 name1    
        name3    
        name4    
        name5    
2   125 name1    
        name4    
        name7