2016-03-19 85 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 
相關問題