Hive 蜂巢中的过滤阵列
我有一个配置单元表,其中每个记录都有一个数组格式的名为Hive 蜂巢中的过滤阵列,hive,hql,Hive,Hql,我有一个配置单元表,其中每个记录都有一个数组格式的名为paid\u value的列 现在我想过滤数组,使每个记录的值必须在1000到10000之间 我不知道怎么做 我知道array\u包含(array,value)函数,但这并不能解决我的问题,因为它只接受一个值作为检查标准,但我想要“介于1000和10000之间”。您可以使用横向视图分解分解数组,然后进行后续过滤。但是,如果您的数组大小很大,那么您的处理过程将很慢 其他选项肯定需要一个UDF来进行筛选。 我能想到的另一个解决方法是使用砖砌UDF
paid\u value
的列
现在我想过滤数组,使每个记录的值必须在1000到10000之间
我不知道怎么做
我知道
array\u包含(array,value)
函数,但这并不能解决我的问题,因为它只接受一个值作为检查标准,但我想要“介于1000和10000之间”。您可以使用横向视图分解
分解数组,然后进行后续过滤。但是,如果您的数组大小很大,那么您的处理过程将很慢
其他选项肯定需要一个UDF来进行筛选。
我能想到的另一个解决方法是使用砖砌UDF:
--这将为您提供一个介于开始(st)和结束(ed)之间的数字数组
然后我使用brickhouse udfbhouse\u intersect\u数组
select count(1)
from range_array cross join <source_tablename>
where size(bhouse_intersect_array(source_array, range_array)) > 0
选择计数(1)
从范围\数组交叉连接
其中大小(bhouse_相交_数组(源_数组、范围_数组))>0
您可以使用横向视图分解
分解阵列,然后进行后续过滤。但是,如果您的数组大小很大,那么您的处理过程将很慢
其他选项肯定需要一个UDF来进行筛选。
我能想到的另一个解决方法是使用砖砌UDF:
--这将为您提供一个介于开始(st)和结束(ed)之间的数字数组
然后我使用brickhouse udfbhouse\u intersect\u数组
select count(1)
from range_array cross join <source_tablename>
where size(bhouse_intersect_array(source_array, range_array)) > 0
选择计数(1)
从范围\数组交叉连接
其中大小(bhouse_相交_数组(源_数组、范围_数组))>0