สงสัยว่าเป็นไปได้หรือไม่ที่จะแยกตัวดำเนินการลดใน presto ออก กรณีการใช้งานตัวอย่าง:
ฉันมีตารางที่คอลัมน์หนึ่งเป็นอาร์เรย์ของ bigints และฉันต้องการส่งคืนคอลัมน์ทั้งหมดที่ขนาดของอาร์เรย์น้อยกว่า 1,000 ดังนั้นฉันสามารถเขียนได้
select
*
from table
where reduce(array_col, 0, (s,x) -> s + power(x,2), s -> if(s < power(1000,2), TRUE, FALSE))
แต่หากมีแถวจำนวนมากและอาร์เรย์มีขนาดใหญ่ อาจใช้เวลาสักครู่หนึ่ง ฉันต้องการให้โอเปอเรเตอร์แยกและส่งคืน FALSE ทันทีที่ผลรวมเกิน 1,000 ขณะนี้ฉันมี:
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))
ซึ่งอย่างน้อยจะบันทึกการคำนวณบางส่วนเมื่อผลรวมเกินค่าเป้าหมาย แต่ยังต้องวนซ้ำแต่ละองค์ประกอบอาร์เรย์