数组与Hive相交

时间:2014-02-05 13:19:08

标签: arrays apache hive intersect

我在Hive中有两个字符串数组,如

{'value1','value2','value3'}
{'value1', 'value2'}

我想合并没有重复的数组,结果:

{'value1','value2','value3'}

我如何在蜂巢中做到这一点?

2 个答案:

答案 0 :(得分:6)

原生解决方案可能是:

SELECT id, collect_set(item)
FROM table
LATERAL VIEW explode(list) lTable AS item
GROUP BY id;

首先使用lateralview进行爆炸,然后使用collect_set删除重复项。

答案 1 :(得分:5)

你需要一个UDF。 Klout在包下有一堆开源HivUDFS brickhouse。这是github link。他们拥有一堆完全符合您目的的UDF。 下载,构建和添加JAR。这是一个例子

CREATE TEMPORARY FUNCTION combine AS 'brickhouse.udf.collect.CombineUDF';
CREATE TEMPORARY FUNCTION combine_unique AS 'brickhouse.udf.collect.CombineUniqueUDAF';

select combine_unique(combine(array('a','b','c'), array('b','c','d'))) from reqtable;

OK
["d","b","c","a"]