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
)