11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

HIVEで文字列の配列化と配列の中身を1レコードずつに分ける方法

Posted at

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;

結構、おもしろい加工ができそうです。

11
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?