group単位でまとめて、カンマ区切りの文字列に結合
mysqlでいう「GROUP_CONCAT」をhiveqlでやりたい。
GROUP_CONCAT関数の便利さは異常 - 開発の風景 〜KKZのSE日記〜
この複数行の結果をつなげてカンマ区切りの文字列にしたい場合、GROUP_CONCAT関数が便利です。これを使うとgroup by単位でまとめて、カンマ区切りの文字列に結合してくれます。GROUP_CONCAT内でdistinctやordey byもかけられるので大半の要件は満たせるはずです。
該当する値を配列にまとめる関数を使う。
collect_list(Col)
カンマ区切りで出力される値はユニーク化されない。
collect_set(Col)
カンマ区切りで出力される値はユニーク化される。
※区切り文字を変更したいとき
concat_ws("\t", collect_list(Col))
こんな感じで使う。
SELECT Col1, collect_set(Col2) FROM your_table GROUP BY Col1; // result(tsv) "col1-1" ["col2-1-1","col2-1-2","col2-1-3"] "col1-2" ["col2-2-1","col2-2-2","col2-3-3"] …
参考
LanguageManual UDF - Apache Hive - Apache Software Foundation
hadoop - Column to comma separated value in Hive - Stack Overflow
mysql - Difference between GROUP_CONCAT() and CONCAT_WS()? - Stack Overflow