Google bigquery Bigquery:BAD_查询(该查询需要太多资源才能解析)

Google bigquery Bigquery:BAD_查询(该查询需要太多资源才能解析),google-bigquery,Google Bigquery,我有一个通过编程生成的BigQuery查询。 它有点像 select *, IF(cond1, val1, IF(cond2, val2, IF (cond3, val3, ...))) as x 但当IFs的数量增加时,我开始 致命错误: 原因:invalidQuery,消息:错误的\u查询(查询需要太多的资源才能解析) 我想知道有多少资源可用于解析查询,以及在哪里记录了这些限制。查询大小本身远小于256KB 我还没有尝试,但想知道是否用 CASE WHEN THEN 可能有

我有一个通过编程生成的BigQuery查询。 它有点像

select *,
       IF(cond1, val1, IF(cond2, val2, IF (cond3, val3, ...))) as x
但当IFs的数量增加时,我开始 致命错误: 原因:invalidQuery,消息:错误的\u查询(查询需要太多的资源才能解析)

我想知道有多少资源可用于解析查询,以及在哪里记录了这些限制。查询大小本身远小于256KB

我还没有尝试,但想知道是否用

CASE WHEN THEN
可能有助于保持在限制之下


谢谢。

这种情况下的限制不是静态的,也不是查询的长度,而是函数嵌套级别的数量。BigQuery在解析期间检查堆栈深度,如果堆栈深度太深,则会引发错误。
每个可能深入的函数都有可变版本,即带有多个参数的CONCAT,CASE而不是IF-这是类似情况下的首选解决方案。

FWIW,使用CASE/WHEN/THEN重写查询在我的特定情况下很有帮助,但我没有检查它是否可以长达256KB。