Hive テーブルの作成: 内部テーブル、変更テーブル、削除テーブルの例

⚡ スマートサマリー

作成、変更、ドロップping Apache Hive のテーブルは、おなじみの SQL スタイルの DDL を使用しますが、結果は、テーブルが Hive が所有する内部テーブルか、単にファイルを記述する外部テーブルかによって異なります。

  • 🧱 テーブルの作成: 1つのステートメントで、Hiveテーブルの列、行のフォーマット、およびオプションで保存場所を定義します。
  • 🏷️ 他の机: RENAMEはテーブル名を変更し、ADD COLUMNSまたはCHANGE COLUMNはデータを再読み込みせずにスキーマを編集します。
  • 🗑️ テーブルを削除: ドロップping 内部テーブルはスキーマとデータの両方を削除しますが、ping 外部テーブルはメタデータのみを削除します。
  • 🔒 内部所有: 内部テーブルまたは管理テーブルはウェアハウスディレクトリの下に存在し、Hiveがそのライフサイクル全体を制御します。
  • 🔗 外部参照: 外部テーブルは、他のツールも読み込むファイルを指しているため、それらのファイルはドロップされても失われません。
  • 🔎 種類を確認してください: DESCRIBE FORMATTED は MANAGED_TABLE または EXTERNAL_TABLE をレポートするため、削除前に推測する必要がなくなります。

Hiveのテーブル作成、変更、削除コマンドの例

テーブルの作成、変更、削除などの操作ping このチュートリアルでは、Hiveのテーブル構造を観察できます。各操作は、まず実際のセッションとして表示され、次に再利用可能なステートメントとして表示されます。

Hiveでテーブルを作成、変更、削除する方法

以下のスクリーンショットでは、列を含むテーブルを作成し、テーブル名を変更しています。

  1. 「empid」と「empname」という2つの列名を持つテーブル「guru_sample」を作成します。
  2. guru99データベースに存在するテーブルを表示します
  3. テーブルの下に表示される guru_sample
  4. テーブル「guru_sample」を「guru_sampleNew」に変更します
  5. 繰り返しますが、「show」コマンドを実行すると、新しい名前「guru_sampleNew」が表示されます。

以下のセッションでは、5 つのステップを順番に実行します。 ハイブ> プロンプトが表示され、名前変更の前後に実行される 2 つの SHOW TABLES 呼び出しによって、その効果が視覚的に確認できます。

Hiveセッションでguru_sampleを作成し、guru_sampleNewに名前を変更します。

ドロップping テーブル guru_sampleNew:

単一の DROP TABLE ステートメントで名前が変更されたテーブルが削除され、Hive は OK と応答します。

ハイブシェルドロップping OKレスポンスのguru_sampleNewテーブル

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 に削除を含むデータのライフサイクル全体を管理させたい場合

内部テーブルのサンプル コード スニペット

  1. 内部テーブルを作成するには
     Hive>CREATE TABLE guruhive_internaltable (id INT,Name STRING);
    	 Row format delimited 
    	 Fields terminated by '\t';
  2. データを内部テーブルにロードします
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO table guruhive_internaltable;
  3. テーブルの内容を表示する
        Hive>select * from guruhive_internaltable;
  4. 内部テーブルを削除するには
        Hive>DROP TABLE guruhive_internaltable;

guruhive_internaltableを削除すると、メタデータとデータも含め、Hiveから削除されます。PURGEオプションを指定しない限り、ファイルはすぐに削除されるのではなく、HDFSのごみ箱フォルダに移動さ​​れます。

以下のスクリーンショットから、1回のセッションで4つのステートメントすべての出力を確認でき、最後に正常にドロップされたことがわかります。

Hiveセッションの作成、ロード、クエリ、および削除ping guruhive_internaltable

上記のコードとスクリーンショットから、以下のことを行っています。

  • 内部テーブルを作成する
  • データを内部テーブルにロードします
  • テーブルの内容を表示する
  • 内部テーブルを削除するには

Hiveの外部テーブル

  • 外部テーブルは疎結合な性質を持ちます。データはHDFS上に存在し、テーブルはHDFSデータ上に作成されます。
  • 言い換えれば、データに対してスキーマを作成していると言えるでしょう。
  • ドロップ時ping テーブルはスキーマのみを削除し、データは以前と同様にHDFS上に残ります。
  • 外部テーブルでは、スキーマが更新されるたびにデータを削除するのではなく、HDFS に保存されたデータに対して複数のスキーマを作成するオプションが提供されます。
  • Hive 4.0.0以降では、テーブルプロパティexternal.table.purgeをtrueに設定すると、DROPコマンドでもデータが削除されます。

外部テーブルを選択するのはどのような場合ですか?

  • 処理データがHDFSで利用可能な場合
  • ファイルが Hive の外部で使用されている場合に便利です

外部テーブルのサンプル コード スニペット

  1. 外部テーブルを作成する
    Hive>CREATE EXTERNAL TABLE guruhive_external(id INT,Name STRING)
    	 Row format delimited
    	 Fields terminated by '\t'
    	 LOCATION '/user/guru99hive/guruhive_external';
  2. テーブル作成時に場所を指定しない場合は、データを手動でロードできます。
        Hive>LOAD DATA INPATH '/user/guru99hive/data.txt' INTO TABLE guruhive_external;
  3. テーブルの内容を表示する
      Hive>select * from guruhive_external;
  4. 外部テーブルを削除するには
      Hive>DROP TABLE guruhive_external;

以下のスクリーンショットから、出力結果を確認できます。最後にあるドロップ操作はスキーマのみを削除し、LOCATIONパスの下にあるファイルは変更されないことに注意してください。

Hiveセッションの作成、ロード、クエリ、および削除ping guruhive_external

上記のコードでは、以下のことを行っています。

  • 外部テーブルを作成する
  • データを外部テーブルにロードします
  • テーブルの内容を表示する
  • ドロップ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 かを確認します。

よくあるご質問

DESCRIBE FORMATTED table_name を実行してください。テーブルタイプの行には、MANAGED_TABLE または EXTERNAL_TABLE のいずれかが表示されます。削除前に確認することが、他のジョブがまだ読み取っているデータの削除を回避する最も効率的な方法です。

はい。ALTER TABLE table_name SET TBLPROPERTIES ('EXTERNAL'='TRUE') はメタストア内の型を反転させ、FALSE は元に戻します。データファイルは元の場所に残るため、再読み込みは不要です。

通常はメタストアのエントリのみが削除されます。ただし、Hive 4.0.0以降では、external.table.purgeプロパティがtrueに設定されている外部テーブルは、DROPコマンドによってデータも削除されるため、まずプロパティを確認してください。

通常の CREATE TABLE 文では、デフォルトでは単純なテキスト テーブルではなく、管理されたトランザクション ORC テーブルが生成されるようになりました。EXTERNAL キーワードを追加することで、Hive 3 クラスター上で以前の非 ACID 動作を維持できます。

TRUNCATEはすべての行を削除しますが、スキーマは保持します。また、管理対象テーブルでのみ機能します。DROPはスキーマも削除します。テーブル定義をリロード後も保持する必要がある場合は、TRUNCATEの方が安全な選択肢です。

いいえ。Hiveはメタストア内で識別子を小文字に変換するため、GURU_SAMPLEとguru_sampleは同じテーブルを参照します。データ内の文字列値は大文字と小文字を区別するため、WHERE句による比較では行が欠落する可能性があります。

はい。カタログツールの機械学習機能は、列のカーディナリティ、NULL値の割合、クエリパターンを分析し、データ型、ファイル形式、パーティションキーを提案します。モデルは計画されたワークロードを認識できないため、出力はあくまでも下書きとして扱ってください。

Copilotは短いコメントからCREATE、ALTER、DROPステートメントを補完し、エージェントアシスタントは完全な移行スクリプトを作成できます。 RevEXTERNALキーワードとPURGEオプションをよく確認してください。これらのオプションを誤って選択すると、実際のデータが削除されてしまいます。