我有一个配置单元表,其中有一列名为 paid_value 以数组格式显示每个记录。现在我要过滤数组,使每个记录的值必须在1000到10000之间。我不知道怎么做。我知道 array_contains(Array<T>, value) 函数,但这并不能解决我的问题,因为它只接受一个值作为检查标准,但我希望像“1000到10000之间”。
paid_value
array_contains(Array<T>, value)
3pvhb19x1#
你可以用 LATERAL VIEW EXPLODE 分解数组,然后进行后续筛选。但是如果你的数组太大,你的进程就会很慢。其他选项肯定需要一个自定义项来进行筛选。我能想到的另一个解决方法是使用brickhouse udf:--这将为您提供一个介于开始(st)和结束(ed)之间的数字数组
LATERAL VIEW EXPLODE
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;
然后我使用brickhouse自定义项 bhouse_intersect_array ```select count(1)from range_array cross join <source_tablename>where size(bhouse_intersect_array(source_array, range_array)) > 0
bhouse_intersect_array
1条答案
按热度按时间3pvhb19x1#
你可以用
LATERAL VIEW EXPLODE
分解数组,然后进行后续筛选。但是如果你的数组太大,你的进程就会很慢。其他选项肯定需要一个自定义项来进行筛选。我能想到的另一个解决方法是使用brickhouse udf:
--这将为您提供一个介于开始(st)和结束(ed)之间的数字数组
然后我使用brickhouse自定义项
bhouse_intersect_array
```select count(1)
from range_array cross join <source_tablename>
where size(bhouse_intersect_array(source_array, range_array)) > 0