如何使用 BigQuery legacy sql 查询多个值的相同重复字符串字段?
How to query same repeated string field for multiple values with BigQuery legacy sql?
我有一个 table t1 结构:
- id: 整数
- 名称:重复(字符串)
我有多个名称的条目:
- 123;名字 1,名字 2
- 124;姓名 1、姓名 3、姓名 4、姓名 5
- 125;姓名 1、姓名 4、姓名 7
我想要 return 具有 name 等于 name1 和 name4[ 的行(唯一) =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
我有一个 table t1 结构:
- id: 整数
- 名称:重复(字符串)
我有多个名称的条目:
- 123;名字 1,名字 2
- 124;姓名 1、姓名 3、姓名 4、姓名 5
- 125;姓名 1、姓名 4、姓名 7
我想要 return 具有 name 等于 name1 和 name4[ 的行(唯一) =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