読者です 読者をやめる 読者になる 読者になる

技術メモ

業務で調べたこととか...

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