Интересно, можно ли выйти из оператора сокращения в престо. Пример использования:
У меня есть таблица, в которой один столбец представляет собой массив bigints, и я хочу вернуть все столбцы, в которых величина массива меньше, чем, скажем, 1000. Поэтому я мог бы написать
select
*
from table
where reduce(array_col, 0, (s,x) -> s + power(x,2), s -> if(s < power(1000,2), TRUE, FALSE))
но если строк много, а массивы большие, это может занять некоторое время. Я хотел бы, чтобы оператор сломался и вернул FALSE, как только сумма превысит 1000. В настоящее время у меня есть:
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))
который, по крайней мере, экономит некоторые вычисления, как только сумма превышает целевое значение, но все же должен выполнять итерацию по каждому элементу массива.