hivesql實現多行轉一行中的collect_list與collect_set的區別

行轉列是sql中常用語法,通常最普遍的做法是使用max,sum再配合case when 來做到,見之前一個blog:是的我又來推銷我的blog哈哈哈哈哈嗝兒~

而對於多行轉一行的可以使用函數來實現,由於現在hive,spark 使用較爲普遍,這裏我們拿裏面的兩個函數collect_list和collect_set來舉例說明,MySQL裏也有對應的多行轉一行——group_concat

collect_list和collect_set都是用來做多行結果轉到一行的,他們的區別是前者不去重,後者去重,(不難理解,學過python的都知道set是去重函數),具體使用方法如下:

原數據是這樣的

我們的需求是結果做到兩列,比如  dog,[water,meat,mantou],實現如下

-- collect_list
select name,collect_list(food) as food from ty_table_liqb_tmp group by name

-- collect_set
select name,collect_set(food) as food from ty_table_liqb_tmp group by name

這裏兩個函數,我只貼出了一個結果圖的原因不是因爲我懶,是因爲編制測試數據時我忘了寫重複數據,所以去不去重都是同一個結果,尷尬,,,至於爲什麼不重新編一下數據,因爲我懶!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章