我有一个以编程方式生成的BigQuery查询。 它有一部分像
select *,
IF(cond1, val1, IF(cond2, val2, IF (cond3, val3, ...))) as x
但是当IF的数量增加时,我开始得到 致命错误: 原因:invalidQuery,message:BAD_QUERY(查询需要太多资源才能解析)
我想知道有多少资源可用于解析查询以及记录这些限制的位置。查询大小本身远低于256KB。
我还没试过,但想知道是否用
重写查询CASE WHEN THEN
可能有助于保持在极限之下。
谢谢。
答案 0 :(得分:3)
这种情况下的限制不是静态的,不是查询的长度,而是函数嵌套级别的数量。 BigQuery在解析期间检查堆栈深度,如果它太深 - 则会引发错误。 每个可以深入的函数都有可变版本,即带有多个参数的CONCAT,CASE而不是IF - 对于像这样的情况,这是一个首选的解决方案。