2016-03-19 82 views
0

追加columnA到现有的阵列型的B列如何将一列添加到Hive中的现有数组列?

select 
string_column_A, 
array_column_B, 
append(array_column_B, string_column_A) as AB 
from onetable; 

更精确,我应该说,因为我希望没有重复“设置”,而不是上述的“阵列”,。但是这里的重复并不是什么大问题。

在Hive中实现这一点的最佳方式是什么?我检查了蜂巢文档,但找不到任何相关信息来执行此操作。

回答

2

你可以试试这个select concat("A",concat_ws("",array('B','C'))); 如果你想分隔符,然后使用下面的语句。

select concat_ws(",","A",concat_ws(",",array('B','C'))); 
+0

这是一个绝妙的主意!但问题是现在它不再是一个数组:select array_contains(array(concat_ws(“,”,“A”,concat_ws(“,”,array('B','C'))),'B') ;返回“假”。 – Osiris

+0

有没有什么办法可以使数组元素唯一?select concat_ws(“,”,“A”,concat_ws(“,”,array('A','C')))will give [ “A”,“A”,“C”]],希望获得[[“A”,“C”]] – Osiris

+0

尝试collect_set(col) https://cwiki.apache.org/confluence/display/蜂巢/ LanguageManual + UDF#LanguageManualUDF,StringFunctions – Dhruv

0

我认为最好的办法是用包含ArrayUnionUDF,它返回一个数组,不但可以用于字符串数组,也将取消重复的Klout的brickhouse JAR。 GitHub的页面是here虽然对于UDF本身的代码是here

用例:

CREATE TEMPORARY FUNCTION array_union AS 'brickhouse.udf.collect.ArrayUnionUDF'; 
SELECT array_union(array(string_column_A), array_column_B) AS combined_columns 
相关问题