Mungkinkah keluar dari operator pengurangan di presto?

Ingin tahu apakah mungkin untuk keluar dari operator pengurangan dengan cepat. Contoh kasus penggunaan:

Saya memiliki tabel di mana satu kolom adalah array bigint, dan saya ingin mengembalikan semua kolom yang besarnya arraynya kurang dari katakanlah 1000. Jadi saya bisa menulis

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

namun jika barisnya banyak dan arraynya besar, hal ini dapat memakan waktu cukup lama. Saya ingin operator memutus dan mengembalikan FALSE segera setelah jumlahnya melebihi 1000. Saat ini saya punya:

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))

yang setidaknya menghemat beberapa komputasi setelah jumlahnya melebihi nilai target, namun masih harus melakukan iterasi melalui setiap elemen array.


person Cry Wolf    schedule 09.01.2019    source sumber


Jawaban (1)


Tidak ada dukungan untuk "break" dari pengurangan array.

Catatan: secara teknis, Anda dapat mencoba meretasnya dengan menghasilkan kegagalan (misalnya 1/0) ketika Anda ingin istirahat dan menangkapnya dengan try. Tapi aku ragu itu sepadan.

person Piotr Findeisen    schedule 10.01.2019