Explode 関数のマスター
このステップでは、配列やマップなどの複雑なデータ型を複数の行に変換することができる Explode 関数を探索します。
まず、新しいサンプル データセットを作成しましょう。/home/hadoop
ディレクトリに移動し、以下の内容を持つ array_data.txt
というファイルを作成します。
## ディレクトリに移動して新しいファイルを作成する
cd /home/hadoop
vim array_data.txt
以下の内容を入力します。
[1,2,3],[4,5],[6,7,8,9]
[10,11],[12,13,14],[15]
次に、このデータを格納するための Hive テーブルを作成します。
CREATE TABLE array_table (arr ARRAY<STRING>);
LOAD DATA LOCAL INPATH '/home/hadoop/array_data.txt' INTO TABLE array_table;
さて、配列データを個々の行にフラット化するために Explode 関数を使用しましょう。
SELECT explode(arr) AS num FROM array_table;
このクエリは、arr
配列の各要素を個別の行に変換し、num
列に対応する値を持つようにします。
また、マップなどの複雑なデータ型を処理するために、Explode 関数を Lateral View と組み合わせて使用することもできます。
CREATE TABLE map_table (key STRING, value MAP<STRING, INT>);
INSERT INTO map_table
SELECT * FROM (
SELECT 'entry1' AS key, map('a', 1, 'b', 2, 'c', 3) AS value
UNION ALL
SELECT 'entry2' AS key, map('d', 4, 'e', 5) AS value
) AS temp_table;
SELECT key, map_keys, map_values
FROM map_table
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values;
与えられた SQL ステートメントは、Hive クエリ言語で書かれたクエリです。このクエリの説明を以下に示します。
SELECT key, map_keys, map_values
: これは結果で選択する列を指定します。結果には 3 つの列 key
、map_keys
、および map_values
が含まれます。
FROM map_table
: これはクエリが map_table
テーブルで実行されることを示します。
LATERAL VIEW EXPLODE(value) temp AS map_keys, map_values
: これは、map_table
の value
列を展開する横断ビューです。EXPLODE
関数は、MAP
列の各キー-値ペアを個別の行に変換するために使用されます。展開された値はエイリアス map_keys
と map_values
に割り当てられます。
要約すると、クエリは map_table
テーブルからデータを取得します。次に、LATERAL VIEW EXPLODE
句を使用して value
列を展開し、MAP
列の各キー-値ペアに対して個別の行を生成します。結果の行には、map_table
の key
列と、それぞれ MAP
列の個々のキーと値を表す展開された map_keys
列と map_values
列が含まれます。