Hive テーブルの作成: 内部テーブル、変更テーブル、削除テーブルの例
⚡ スマートサマリー
作成、変更、ドロップping Apache Hive のテーブルは、おなじみの SQL スタイルの DDL を使用しますが、結果は、テーブルが Hive が所有する内部テーブルか、単にファイルを記述する外部テーブルかによって異なります。
テーブルの作成、変更、削除などの操作ping このチュートリアルでは、Hiveのテーブル構造を観察できます。各操作は、まず実際のセッションとして表示され、次に再利用可能なステートメントとして表示されます。
Hiveでテーブルを作成、変更、削除する方法
以下のスクリーンショットでは、列を含むテーブルを作成し、テーブル名を変更しています。
- 「empid」と「empname」という2つの列名を持つテーブル「guru_sample」を作成します。
- guru99データベースに存在するテーブルを表示します
- テーブルの下に表示される guru_sample
- テーブル「guru_sample」を「guru_sampleNew」に変更します
- 繰り返しますが、「show」コマンドを実行すると、新しい名前「guru_sampleNew」が表示されます。
以下のセッションでは、5 つのステップを順番に実行します。 ハイブ> プロンプトが表示され、名前変更の前後に実行される 2 つの SHOW TABLES 呼び出しによって、その効果が視覚的に確認できます。
ドロップping テーブル guru_sampleNew:
単一の DROP TABLE ステートメントで名前が変更されたテーブルが削除され、Hive は OK と応答します。
HiveのCREATE TABLE構文と共通句
上記の例では、可能な限り短い形式を使用しています。ドキュメントに記載されているステートメントは、いくつかのオプションの句を受け入れ、それぞれの句が、この例ではデフォルト値のままになっている何らかの決定を行います。
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type, ...)] [CLUSTERED BY (col_name, ...) INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)];
| 句 | 制御するもの |
|---|---|
| 外部 | 外部テーブルを作成するため、DROPを実行してもデータファイルはそのまま残ります。 |
| 一時的 | セッションスコープのテーブルを作成し、セッション終了時に消滅します。 |
| 存在しない場合 | 同名のテーブルが既に存在する場合にエラーを抑制します。 |
| 分割基準 | テーブルをキー値ごとに1つのディレクトリに分割します |
| …によってn個のバケットにグループ化されます | 行をハッシュ化して固定数のファイルに格納する |
| 行フォーマット / 保存形式 | 区切り文字またはSerDeとファイル形式(TEXTFILE、ORC、Parquetなど)を設定します。 |
| 位置 | テーブルをウェアハウスのデフォルトではなく、特定のHDFSパスに向けます。 |
| TBLプロパティ | external.table.purge を含むメタデータのキーと値のペアを添付します。 |
関連フォーム、 CREATE TABLE new_table LIKE existing_table、行をコピーせずにスキーマをコピーします。PARTITIONED BY や CLUSTERED BY などの構造句については、ガイドで詳しく説明されています。 Hiveのパーティションとバケット.
テーブルの種類とその使用法
テーブルの作成方法は、従来のリレーショナルデータベースと同様です。フィルタリングや結合などの機能は、テーブルに対しても実行できます。
Hive は、スキーマのロードと設計に応じて、内部テーブルと外部テーブルの 2 種類のテーブル構造を扱います。 ハイブこの選択は見た目の問題ではなく、データファイルの所有権と、テーブルが削除されたときにデータファイルがどうなるかを決定するものです。
Hiveの内部テーブル
- 内部テーブルは本質的に密結合型です。このタイプのテーブルでは、まずテーブルを作成し、データをロードする必要があります。
- これはスキーマに基づくデータと呼ぶことができる。
- ドロップでping このテーブルは、データとスキーマの両方が削除されます。
- このテーブルの保存場所は /user/hive/warehouse になります。
- 内部テーブルは管理対象テーブルとも呼ばれ、TRUNCATE、ARCHIVE、MERGE、CONCATENATE、およびACIDトランザクションをサポートするのは内部テーブルのみです。
内部テーブルを選択するのはどのような場合ですか?
- 処理データがローカルファイルシステムに存在する場合
- Hive に削除を含むデータのライフサイクル全体を管理させたい場合
内部テーブルのサンプル コード スニペット
- 内部テーブルを作成するには
Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING); Row format delimited Fields terminated by '\t';
- データを内部テーブルにロードします
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
- テーブルの内容を表示する
Hive>select * from guruhive_internaltable;
- 内部テーブルを削除するには
Hive>DROP TABLE guruhive_internaltable;
guruhive_internaltableを削除すると、メタデータとデータも含め、Hiveから削除されます。PURGEオプションを指定しない限り、ファイルはすぐに削除されるのではなく、HDFSのごみ箱フォルダに移動されます。
以下のスクリーンショットから、1回のセッションで4つのステートメントすべての出力を確認でき、最後に正常にドロップされたことがわかります。
上記のコードとスクリーンショットから、以下のことを行っています。
- 内部テーブルを作成する
- データを内部テーブルにロードします
- テーブルの内容を表示する
- 内部テーブルを削除するには
Hiveの外部テーブル
- 外部テーブルは疎結合な性質を持ちます。データはHDFS上に存在し、テーブルはHDFSデータ上に作成されます。
- 言い換えれば、データに対してスキーマを作成していると言えるでしょう。
- ドロップ時ping テーブルはスキーマのみを削除し、データは以前と同様にHDFS上に残ります。
- 外部テーブルでは、スキーマが更新されるたびにデータを削除するのではなく、HDFS に保存されたデータに対して複数のスキーマを作成するオプションが提供されます。
- Hive 4.0.0以降では、テーブルプロパティexternal.table.purgeをtrueに設定すると、DROPコマンドでもデータが削除されます。
外部テーブルを選択するのはどのような場合ですか?
- 処理データがHDFSで利用可能な場合
- ファイルが Hive の外部で使用されている場合に便利です
外部テーブルのサンプル コード スニペット
- 外部テーブルを作成する
Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING) Row format delimited Fields terminated by '\t' LOCATION '/user/guru99hive/guruhive_external';
- テーブル作成時に場所を指定しない場合は、データを手動でロードできます。
Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
- テーブルの内容を表示する
Hive>select * from guruhive_external;
- 外部テーブルを削除するには
Hive>DROP TABLE guruhive_external;
以下のスクリーンショットから、出力結果を確認できます。最後にあるドロップ操作はスキーマのみを削除し、LOCATIONパスの下にあるファイルは変更されないことに注意してください。
上記のコードでは、以下のことを行っています。
- 外部テーブルを作成する
- データを外部テーブルにロードします
- テーブルの内容を表示する
- ドロップping 外部テーブル
内部テーブルと外部テーブルの違い
| 機能 | インナー | 外部 |
|---|---|---|
| スキーマ | スキーマ上のデータ | データのスキーマ |
| ストレージの場所 | /ユーザー/ハイブ/ウェアハウス | LOCATIONで指定されたHDFSの場所 |
| データ可用性 | ローカルファイルシステム内 | HDFS内 |
| ドロップの影響 | スキーマとデータを削除します | external.table.purgeがtrueでない限り、スキーマのみを削除します。 |
| TRUNCATEのサポート | サポート | サポートされていません |
| ACIDトランザクション | サポート | サポートされていません |
その Apache Hiveのドキュメント ルールは明確に述べられています。Hiveは、管理対象テーブルのデータはHiveが所有していると想定し、外部テーブルのデータは所有していないと想定します。上記のすべての違いは、この単一の前提から生じます。
ALTER TABLEおよびDROP TABLEコマンドリファレンス
上記のスクリーンショットは、名前変更と削除のみを示しています。これらは、実務担当者が既存のテーブルに対して最も頻繁に行う操作です。
| ステートメント | 目的 |
|---|---|
| テーブル table_name を new_name に名前変更します。 | テーブルの名前を変更します。管理対象テーブルの場合は、HDFS ディレクトリも移動します。 |
| ALTER TABLE table_name ADD COLUMNS (col_name data_type); | スキーマの末尾に1つ以上の列を追加します。 |
| ALTER TABLE table_name CHANGE COLUMN old_name new_name data_type; | 列の名前を変更するか、列の型を変更します。 |
| ALTER TABLE table_name REPLACE COLUMNS (…); | 列リスト全体を新しいものに置き換えます |
| ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE'); | 管理対象テーブルを外部テーブルに変換し、FALSE を指定すると逆変換します。 |
| テーブルテーブルを削除 [存在する場合] テーブル名 [パージ]; | テーブルを削除します。PURGE はゴミ箱フォルダをスキップするため、データは復元できません。 |
| TRUNCATE [TABLE] table_name; | すべての行を削除しますが、スキーマは保持します。管理対象テーブルのみ。 |
スクリプトには、2つの安全対策を組み込む価値があります。IF EXISTS は、既に削除されたテーブルに対して削除処理が失敗するのを防ぎ、DESCRIBE FORMATTED は、削除処理が実行される前に、対象が MANAGED_TABLE か EXTERNAL_TABLE かを確認します。





