hive中的过滤阵列

q9rjltbz  于 2021-06-25  发布在  Hive
关注(0)|答案(1)|浏览(364)

我有一个配置单元表,其中有一列名为 paid_value 以数组格式显示每个记录。
现在我要过滤数组,使每个记录的值必须在1000到10000之间。
我不知道怎么做。
我知道 array_contains(Array<T>, value) 函数,但这并不能解决我的问题,因为它只接受一个值作为检查标准,但我希望像“1000到10000之间”。

3pvhb19x

3pvhb19x1#

你可以用 LATERAL VIEW EXPLODE 分解数组,然后进行后续筛选。但是如果你的数组太大,你的进程就会很慢。
其他选项肯定需要一个自定义项来进行筛选。我能想到的另一个解决方法是使用brickhouse udf:
--这将为您提供一个介于开始(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;

然后我使用brickhouse自定义项 bhouse_intersect_array ```
select count(1)
from range_array cross join <source_tablename>
where size(bhouse_intersect_array(source_array, range_array)) > 0

相关问题