HIVEでビッグデータを処理する場合、
ログデータの中から区切り文字(例えば、","コンマ区切り)のデータを1レコードずつに分配したい場合があると思います。
その場合、まずは区切り文字の列を配列に変換し、
それを一レコードずつに落としこんでいきます。
配列に落としこむのは、HIVEで提供されているsplitを使用します。
splitは指定したカラム内の文字列を区切り文字で自動的に分離して配列に格納してくれます。
例えば、hogeカラム内がコンマ区切りの文字列の場合…
split(hoge, ',')
そして、これを一レコードずつに表示するには、
HIVEのUDFとして提供されているexplodeを使用します。
explodeは配列のデータを一レコードずつに出力するメソッドです。
bar_listというカラムに配列でデータが格納されている、
barsテーブルがあったとします。
すると以下のようにかけます。
SELECT explode(bar_list) AS bar_id FROM bars;
この2つの書き方を組み合わせると一レコードずつに区切ったテーブルの作成ができます。
注意しなければならないのは、explodeの使い方です。
実は、explodeは配列を展開するとそれを一つのテーブルとしてみなすことになり、
他のカラムと合わせて表示することができません。
したがって、HIVEのLATERAL VIEWを使い、viewとしてくっつけます。
例えば、bar_id, bar_listを持つbarsをいうテーブルがあったら、以下のような形になります。
SELECT bar_id, bar_player
FROM bars LATERAL VIEW explode(bar_list) ad_table AS bar_player;
結構、おもしろい加工ができそうです。