はじめに
東方の神秘的な土地に、高い山の頂上に崇拝される寺院が立ち、古代の知恵の霧に包まれていました。その神聖な壁の中には、データ操作の神聖な技術の達人である尊敬される戦士僧ヒロが住んでいました。彼がデータの秘密を解き明かすための揺るぎない献身は、学者や僧侶の双方からの彼の尊敬を得ていました。
ある日、寺院の住職は心配の表情を刻んだままヒロを自分の部屋に呼びました。「ヒロ、深刻な状況が起こりました」と住職は始めました。「我々の祖先の古代の知識を含む我々の神聖な巻物が、領域全体に散らばってしまいました。この貴重な情報が永遠に失われる前に、回復して整理しなければなりません」。
ヒロは深く礼をし、決意の光が目に輝いていました。「私はあなたに失望しません、尊敬すべき師匠」と彼は誓いました。「ハドープとそのテーブル生成関数の力を借りて、私はこの土地を捜索し、我々の祖先の知恵に秩序を取り戻します」。
住職は厳かにうなずき、ヒロの揺るぎない決意を信じました。それで、ヒロのハイブのテーブル生成関数をマスターする探求が始まりました。これは、彼の技術と決意を最大限まで試す旅でした。
Lateral View 関数の探索
このステップでは、複雑なデータ構造をより管理しやすい形式に分解することができる強力な Lateral View 関数を掘り下げます。
まず、作業用のサンプル データセットを作成しましょう。/home/hadoop ディレクトリに移動し、以下の内容を持つ sample.txt という新しいファイルを作成します。
ターミナルで hadoop ユーザーに切り替えるには、次のコマンドを使用します。
su - hadoop
## ディレクトリに移動して新しいファイルを作成する
cd /home/hadoop
vim sample.txt
以下の内容を入力します。
1,2,3|4,5|6,7,8
9,10|11,12,13|14,15
ファイルが保存され、アクセス可能であることを確認します。
次に、このデータを格納するための Hive テーブルを作成します。ターミナルで次のコマンドを実行して Hive CLI を開きます。
hive
Hive CLI 内で、次のコマンドを実行します。
CREATE TABLE sample_table (line STRING);
LOAD DATA LOCAL INPATH '/home/hadoop/sample.txt' INTO TABLE sample_table;
さて、line 列の複雑な文字列データを分解するために Lateral View 関数を使用しましょう。
SELECT line, x, y
FROM sample_table
LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS x
LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp2 AS y;
与えられた SQL ステートメントは、Hive クエリ言語を使用して sample_table と呼ばれるテーブルからデータを取得します。このクエリの簡単な説明を以下に示します。
テーブルから 3 つの列
line、x、およびyを選択します。データは
sample_tableテーブルから取得されます。クエリは 2 回の別々の操作を行うために
LATERAL VIEW OUTER EXPLODE句を使用します。- 最初の
LATERAL VIEW OUTER EXPLODE(SPLIT(line, '\\|')) temp AS xは、区切り文字|を使用してline列の値を分割します。次に、EXPLODE関数は結果の配列を複数の行に変換します。これらの展開された値はエイリアスxに割り当てられます。 - 2 番目の
LATERAL VIEW OUTER EXPLODE(SPLIT(x, ',')) temp2 AS yは、区切り文字,を使用してx列(前のステップで作成された)の値を分割します。再び、EXPLODE関数は結果の配列を複数の行に変換します。これらの展開された値はエイリアスyに割り当てられます。
- 最初の
要約すると、クエリは sample_table の各行を取得して 2 回の分割を行います。最初に、line 列を | で分割して、x 列に異なる値を持つ複数の行を作成します。次に、x 列を , で分割して、y 列にさらに異なる値を持つ行を作成します。結果は、line、x、および y の値のすべての可能な組み合わせを持つ行のセットです。
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 列が含まれます。
まとめ
この実験では、戦士僧ヒロの揺るぎない決意に導かれて、ハイブのテーブル生成関数の神秘的な世界を旅しました。実践的な探求を通じて、我々は Lateral View と Explode 関数の力を解き明かし、複雑なデータ構造をより管理しやすい形式に変換する技術をマスターしました。
入り組んだデータを個々の要素に分解することで、我々はその中に隠された秘密を解き明かし、貴重な洞察を明らかにし、より深い理解の道を切り開きました。ヒロの探求が古代の知恵の散らばった巻物を再び集めたのと同じように、これらの強力な関数を我々がマスターすることで、一度は不可能と考えられていた方法でデータを整理し分析する力を手に入れました。
この実験は、我々の技術力を強化するだけでなく、データ操作の持続的な遺産に対する深い感謝を我々の中に植え付けました。私たちが旅を続けるにつれて、ここで学んだ教訓が道標となり、データ技術のさらなるマスタリーへの道を照らしてくれることが願われます。



