LoginSignup
17
13

More than 5 years have passed since last update.

Hive 複数要素を展開して、複数行にする(LATERAL VIEW/split/explode)

Last updated at Posted at 2018-01-04

内容

1.したいこと
2.クエリと解説
2_1.split()の挙動
2_2.explode()の挙動

1.したいこと

usr item_list
A aaa,bb,c
B a,bb
C ss

ユーザごとに購入したアイテムが入っているテーブル(テーブル名はdataとする)は、
item_listの1カラムにitemがたくさん入っている構造だが、これを
以下のtemカラムのように1行1アイテムの構造にしたい。

usr item_list
A aaa
A bb
A c
B a
B bb
C ss

2.クエリと解説

SELECT
        usr,
        item
FROM
        data
LATERAL VIEW
        explode( split( item_list, ',' ) ) item_list2 as item

上記のように
item_listカラムを、
①split()で1アイテムずつに分割する。
②explode()で1カラムにする。
③LATERAL VIEW でビューにして、元のdataテーブルの横につけている。
という順番で作成できるが、以下で①、②、③の挙動を見る。

2_1.split()の挙動

split()で1アイテムずつに分割する

--item_listを、カンマが出てきたら分割
SELECT
        split(item_list, ',') as item
FROM
        data

結果

item_list
["aaa"],["bb"],["c"]
["a"],["bb"]
["ss"]

カンマが出てきたときに分割されていることが確認できました。
ここでの重要なポイントは、配列になっているということです。
2_2.で行う、explode()を使用するためには、配列にしておく必要があります。

2_2.explode()の挙動

explode()で1アイテム1行にする

SELECT
        explode(split(item_list, ',')) as item
FROM
        data

結果

item_list
aaa
bb
c
a
bb
ss

itemごとに1行になっていることが確認できました。

2_3.LATERAL VIEW の挙動

LATERAL VIEWでVIEWを作る

以下のように、2_1,2_2で解説したものを、
LATERAL VIEWでVIEWにしてitemというカラムを作成し、
元のdataテーブルの横につけている。

SELECT
        usr,
        item
FROM
        data
LATERAL VIEW
        explode( split( item_list, ',' ) ) item_list2 as item

結果

usr item_list
A aaa
A bb
A c
B a
B bb
C ss

完成。

17
13
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
17
13