Sql 是否可能在presto中中断reduce运算符?

Sql 是否可能在presto中中断reduce运算符?,sql,lambda,reduce,presto,Sql,Lambda,Reduce,Presto,想知道是否有可能在presto中突破reduce操作符。示例用例: 我有一个表,其中一列是bigint数组,我想返回数组大小小于1000的所有列。这样我就可以写作了 select * from table where reduce(array_col, 0, (s,x) -> s + power(x,2), s -> if(s < power(1000,2), TRUE, FALSE)) 但是如果有很多行并且数组很大,这可能需要一段时间。我希望操作员在总数超过1000时

想知道是否有可能在presto中突破reduce操作符。示例用例:

我有一个表,其中一列是bigint数组,我想返回数组大小小于1000的所有列。这样我就可以写作了

select 
* 
from table 
where reduce(array_col, 0, (s,x) -> s + power(x,2), s -> if(s < power(1000,2), TRUE, FALSE))
但是如果有很多行并且数组很大,这可能需要一段时间。我希望操作员在总数超过1000时立即中断并返回FALSE。目前我有:

select 
* 
from table 
where reduce(array_col, 0, if(s >= power(1000,2), power(1000,2), s + power(x,2), s -> if(s < power(1000,2), TRUE, FALSE))

当总和超过目标值时,它至少可以节省一些计算,但仍然必须遍历每个数组元素。

不支持从数组中缩减中断

注意:从技术上讲,您可以尝试通过生成一个失败(例如1/0)来解决这个问题,当您想要休息时,可以使用try来捕获它。但我怀疑这是否值得