Вы можете использовать LATERAL VIEW EXPLODE
, чтобы взорвать массив, а затем выполнить фильтр впоследствии. Но если размер вашего массива огромен, ваш процесс будет медленным.
Другой вариант определенно нуждается в UDF для выполнения фильтра. Другой обходной путь, который я могу придумать, заключается в использовании UDF для Brickhouse:
- это даст вам массив чисел между началом (st) и концом (ed)
select collect_set(pe.i+1) as range_array
from
(SELECT 1000 as st, 1100 as ed) t
LATERAL VIEW posexplode(split(space(ed-st),' ')) pe AS i,x;
Тогда я использую кирпичный дом UDF bhouse_intersect_array
select count(1)
from range_array cross join <source_tablename>
where size(bhouse_intersect_array(source_array, range_array)) > 0