sql - 可以在 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))
一旦总和超过目标值,这至少可以节省一些计算,但仍然必须遍历每个数组元素。
解决方案
不支持从数组缩减中“中断”。
注意:从技术上讲,您可以尝试通过生成故障(例如1/0
)来解决此问题,当您想要休息并用try
. 我怀疑它是否值得。
推荐阅读
- amazon-web-services - 在 Cloudfront s3 发行版中使用有序缓存拒绝访问 (403)
- python - 单击破折号中的按钮后,从数据框中填充 dash_table
- r - 如何在闪亮的反应数据中重复创建列?
- javascript - 在 React 中将用户给定的图像发送到 Api
- javascript - Firebase 错误:未创建任何 Firebase 应用
- java - 轻量级易于安装的数据库
- visual-studio - react-native run-windows 给出错误:无法打开证书:TemporaryKey.pfx 错误
- mongodb - Reg:mongo中的数据也反映了其他日期:
- firebase - 如何使用多个 .Where() 进行搜索?Vue JS 和 Firebase
- r - 如何在 R 中重塑我的数据框(转置、选择、删除行)?