首页 > 解决方案 > 可以在 presto 中突破 reduce 运算符吗?

问题描述

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

我有一个表,其中一列是一个大整数数组,我想返回数组大小小于 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))

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

标签: sqllambdareducepresto

解决方案


不支持从数组缩减中“中断”。

注意:从技术上讲,您可以尝试通过生成故障(例如1/0)来解决此问题,当您想要休息并用try. 我怀疑它是否值得。


推荐阅读