2017-05-02 43 views
0

我有下面的表,其中包含ID與每個ID值的數組重複項,我想找出每個ID的唯一值,如何做到這一點?collect_set在陣列類型與羣在配置單元

CREATE TABLE test(
id string, 
values array<string>) 

當運行下面的命令,它會引發錯誤作爲collect_set僅支持基本類型的值。

select id, collect_set(values) from ts group by id; 

錯誤:

FAILED: UDFArgumentTypeException Only primitive type arguments are accepted but array was passed as parameter 1.

回答

1

隨着錯誤消息指出Only primitive type arguments are accepted but array was passed as parameter 1.,你需要在使用前數組String轉換。

您可以使用explode()函數實現相同的功能。例如:

select 
    id, 
    collect_set(tokens) 
FROM 
    ts LATERAL VIEW explode(values) x AS tokens 
group by 
    id; 

我希望這會幫助你。

+0

感謝它的工作:) –

+0

應該不可能是這樣的:'選擇ID,collect_set(爆炸值)爲values_list'是'value'的'array'? –

0

解決此問題的另一種非正式方法,特別是在具有許多group by和collect_set的嵌套查詢中,使用concat_ws(「」,values)將數組連接成一個字符串。

select id, collect_set(concat_ws("", values)) from ts group by id;