Impala中逻辑运算是否支持短路求值?Oracle背景用户性能优化疑问
Impala中AND/OR是否支持短路求值?
Impala不支持AND和OR逻辑的短路求值——无论WHERE子句里的条件顺序如何,所有条件都会被完整求值,不会因为前序条件的结果就跳过后续条件的计算。
针对你提到的场景:原脚本里的colA > 0 and colB - colA > 10,哪怕colA > 0不成立,Impala依然会执行colB - colA > 10的计算,所以靠colA > 0来避免第二部分求值的思路在Impala里完全无效。既然你已经确认colB - colA在colA <=0时也能正常计算,那从性能优化的角度,这个前置的colA >0如果只是为了减少计算量的话,完全可以去掉(如果业务逻辑上确实需要过滤colA <=0的行则另当别论)。
另外需要注意:如果你的场景是要避免类似除以0、空值转换这类可能触发报错的计算,在Impala里不能依赖短路求值来规避,必须用CASE WHEN或者专用函数处理。比如要避免colC / colA出现除以0的情况,得写成:
CASE WHEN colA <> 0 THEN colC / colA ELSE NULL END
而不能指望colA <> 0 AND colC/colA > 5这种写法跳过除法计算。
内容的提问来源于stack exchange,提问作者AnneC
相关产品推荐
相关产品推荐

