Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/124.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hive 蜂巢中的过滤阵列_Hive_Hql - Fatal编程技术网

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 udf
bhouse\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 udf
bhouse\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