WHERE 子句中允许有多少个谓词?
How many predicates are allowed in a WHERE clause?
我们正在动态构建一个 SQL 语句,其中 WHERE 子句将包含使用 OR
连接在一起的多个谓词
SELECT cols
FROM t
WHERE (t.id = id1 AND t.PARTITIONDATE = “yyyy-mm-dd”)
OR (t.id = id2 AND t.PARTITIONDATE = “yyyy-mm-dd”)
OR (t.id = id3 AND t.PARTITIONDATE = “yyyy-mm-dd”)
OR (t.id = id4 AND t.PARTITIONDATE = “yyyy-mm-dd”)
etc…
BigQuery 在这样的 SQL 语句中允许的最大条件数是多少?
我查看了文档 (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#where_clause),但没有找到答案。
您需要考虑以下两个因素:
- 最大未解析标准 SQL 查询长度 - 1 MB - 未解析标准 SQL 查询最长可达 1 MB。如果您的查询较长,您会收到以下错误:查询太大。要保持在这个限制内,请考虑用查询参数替换大型数组或列表。
和
- 最大已解析遗留和标准 SQL 查询长度 - 12 MB - 已解析查询长度的限制包括查询引用的所有视图和通配符表的长度。
您可以轻松地试验可以使用多少谓词 - 例如 - 我刚刚做了非常快速和简化的实验,并且能够使用 50K 谓词与 OR 连接在一起使用下面的超级简化和完全虚拟的脚本
execute immediate (
select 'select 1 from (select 1) where ' || string_agg('1 = ' || num, ' or ')
from unnest(generate_array(1,50000)) num
)
我们正在动态构建一个 SQL 语句,其中 WHERE 子句将包含使用 OR
连接在一起的多个谓词SELECT cols
FROM t
WHERE (t.id = id1 AND t.PARTITIONDATE = “yyyy-mm-dd”)
OR (t.id = id2 AND t.PARTITIONDATE = “yyyy-mm-dd”)
OR (t.id = id3 AND t.PARTITIONDATE = “yyyy-mm-dd”)
OR (t.id = id4 AND t.PARTITIONDATE = “yyyy-mm-dd”)
etc…
BigQuery 在这样的 SQL 语句中允许的最大条件数是多少?
我查看了文档 (https://cloud.google.com/bigquery/docs/reference/standard-sql/query-syntax#where_clause),但没有找到答案。
您需要考虑以下两个因素:
- 最大未解析标准 SQL 查询长度 - 1 MB - 未解析标准 SQL 查询最长可达 1 MB。如果您的查询较长,您会收到以下错误:查询太大。要保持在这个限制内,请考虑用查询参数替换大型数组或列表。
和
- 最大已解析遗留和标准 SQL 查询长度 - 12 MB - 已解析查询长度的限制包括查询引用的所有视图和通配符表的长度。
您可以轻松地试验可以使用多少谓词 - 例如 - 我刚刚做了非常快速和简化的实验,并且能够使用 50K 谓词与 OR 连接在一起使用下面的超级简化和完全虚拟的脚本
execute immediate (
select 'select 1 from (select 1) where ' || string_agg('1 = ' || num, ' or ')
from unnest(generate_array(1,50000)) num
)