【Hive】array型(配列)へ変換
Hiveを使って、ある値をキーにして配列を作成したいときには、
以下の2つの方法があります。
COLLECT_LIST COLLECT_SET
COLLECT_LIST
COLLECT_LISTは、ある値をキーとして配列を作成します。
早速例を見ていきましょう。
このようなテーブルがあったとします。
user_id | animal |
---|---|
1 | ぞう |
1 | きりん |
1 | ぞう |
4 | えび |
4 | さる |
6 | いぬ |
user_idをキーとして、下記のようなテーブルを作りたいとします。
user_id | animals |
---|---|
1 | [ぞう,きりん,ぞう] |
4 | [えび,さる] |
6 | [いぬ] |
その時のHiveクエリとしては、
SELECT user_id, COLLECT_LIST(animal) as animals FROM table GROUP BY user_id
COLLECT_SET
こちらはCOLLECT_LISTと少し異なります。
説明の前に具体例を見ていきましょう。
先ほどと同じテーブルを対象とします。
user_id | animal |
---|---|
1 | ぞう |
1 | きりん |
1 | ぞう |
4 | えび |
4 | さる |
6 | いぬ |
このテーブルに対して、以下のクエリを実行します。
COLLECT_LISTのクエリとほぼ同じクエリですね。
SELECT user_id, COLLECT_SET(animal) as animals FROM table GROUP BY user_id
すると、結果は、、、、
user_id | animals |
---|---|
1 | [ぞう,きりん] |
4 | [えび,さる] |
6 | [いぬ] |
user_id=1の結果が、COLLECT_LISTと異なりましたね。
なにが異なったのかというと、animalsカラムを見てください。
"ぞう"が2つから1になりました。
つまり、COLLECT_SETは配列に変換した値の中で重複が発生しません。
今までの結果をまとめると、
COLLECT_LIST:重複あり
COLLECT_SET :重複なし
このような違いがありますので、シーンによって使い分けてください。