web-dev-qa-db-ja.com

Hive内部テーブルと外部テーブルの違いは?

Hiveの外部テーブルと内部テーブルの違いを教えてください。テーブルをドロップするときに違いが生じることは知っています。データとメタデータが内部で削除され、メタデータのみが外部テーブルで削除されるという意味がわかりません。誰でもノードの面で私を説明できますか?.

100
DrewRose

Hiveは、状態を追跡するために使用するマスターノードにリレーショナルデータベースを持っています。たとえば、CREATE TABLE FOO(foo string) LOCATION 'hdfs://tmp/';を実行すると、このテーブルスキーマはデータベースに保存されます。

パーティションテーブルがある場合、パーティションはデータベースに保存されます(これにより、Hiveはファイルシステムにアクセスしてパーティションを見つけることなく、パーティションのリストを使用できます)。これらの種類のものは「メタデータ」です。

内部テーブルを削除すると、データが削除され、メタデータも削除されます。

外部表を削除すると、メタデータのみが削除されます。これは、Hiveが現在そのデータを知らないことを意味します。データ自体には影響しません。

105
prestomation

Hiveテーブルは、EXTERNALまたはINTERNALとして作成できます。これは、データのロード、制御、および管理方法に影響する選択です。

EXTERNALテーブルは次の場合に使用します。

  1. データはHiveの外部でも使用されます。たとえば、データファイルは、ファイルをロックしない既存のプログラムによって読み取られて処理されます。
  2. DROP TABLEの後でも、データは基礎となる場所に残っている必要があります。これは、単一のデータセットで複数のスキーマ(テーブルまたはビュー)を指している場合、またはさまざまなスキーマを反復処理している場合に適用できます。
  3. ASVなどのカスタムの場所を使用します。
  4. Hiveはデータやコントロール設定、ディレクトリなどを所有するべきではありません。それらを行う別のプログラムまたはプロセスがあります。
  5. 既存のテーブルに基づいてテーブルを作成していません(AS SELECT)。

次の場合に内部テーブルを使用します。

データは一時的なものです。

Hiveでテーブルとデータのライフサイクルを完全に管理する必要があります。

92
swetha

質問に答えるには:

外部テーブルの場合、Hiveはデータをウェアハウスディレクトリに移動しません。外部テーブルが削除されると、テーブルメタデータは削除されますが、データは削除されません。

内部テーブルの場合、Hiveはデータをウェアハウスディレクトリに移動します。テーブルが削除されると、テーブルのメタデータとデータが削除されます。


参考までに、

内部テーブルと外部テーブルの違い:

外部テーブルの場合-

  • 外部テーブルはファイルをHDFSサーバーに保存しますが、テーブルはソースファイルに完全にはリンクされていません。

  • 外部テーブルを削除しても、ファイルはHDFSサーバーに残ります。

    例として、Hive-QLを使用してHiveで“ table_test”と呼ばれるexternal tableを作成し、テーブルをファイルにリンクする場合 「file」その後、「table_test」をHiveから削除しても、「file」はHDFS から削除されません。

  • 外部テーブルファイルは、HDFSファイル構造にアクセスできるすべてのユーザーがアクセスできるため、セキュリティはHDFSファイル/フォルダーレベルで管理する必要があります。

  • メタデータはマスターノードで維持され、Hiveから外部テーブルを削除すると、データ/ファイルではなくメタデータのみが削除されます。


内部テーブルの場合-

  • Hive.metastore.warehouse.dirの設定に基づいてディレクトリに格納され、デフォルトで内部テーブルは次のディレクトリに格納されます“/user/Hive/warehouse” configファイルの場所を更新することで変更できます。
  • テーブルを削除すると、マスターノードとHDFSからそれぞれメタデータとデータが削除されます。
  • 内部テーブルファイルのセキュリティは、Hiveを介してのみ制御されます。セキュリティは、Hive内で、おそらくスキーマレベルで管理する必要があります(組織によって異なります)。

Hiveには内部テーブルまたは外部テーブルがあります。これは、データのロード、制御、および管理方法に影響する選択です。

次の場合に外部テーブルを使用:

  • データは、Hive以外でも使用されます。たとえば、データファイルは、ファイルをロックしない既存のプログラムによって読み取られて処理されます。
  • データはDROP TABLEの後でも基礎となる場所に残る必要があります。これは、単一のデータセットで複数のスキーマ(テーブルまたはビュー)を指している場合、またはさまざまな方法で繰り返し処理している場合に適用できます可能なスキーマ。
  • Hiveはデータやコントロール設定、ディレクトリなどを所有してはいけません。これらのことを行う別のプログラムまたはプロセスがあります。
  • 既存のテーブルに基づいてテーブルを作成していません(AS SELECT)。

次の場合に内部テーブルを使用:

  • データはtemporaryです。
  • テーブルとデータのライフサイクルを完全に管理するHiveが必要です

ソース:

HDInsight:Hiveの内部テーブルと外部テーブルの概要

Hadoop- Hiveの内部および外部テーブル

39
Ani Menon

内部テーブルデータはWarehouseフォルダーに格納され、外部テーブルデータはテーブル作成で指定した場所を指します。したがって、内部テーブルを削除すると、スキーマとウェアハウスフォルダの下のデータが削除されますが、外部テーブルではスキーマのみが失われます。したがって、テーブルを元に戻したい場合は、スキーマを使用してテーブルを再度作成し、場所を指定できます。それが今明確であることを願っています。

4
Hadoop Learner

外部テーブルでは、ドロップすると、テーブルのスキーマのみが削除され、テーブルデータは物理的な場所に存在します。そのため、データを削除するにはhadoop fs-rmr tablenameを使用します。管理テーブルHiveはテーブルを完全に制御します。外部表では、ユーザーが制御できます。

3
Ajaykumar

これまでの限られた研究とテスト(Hive 1.1.0 -cdh5.12.0を使用)に基づく動作の唯一の違い(意図した使用法ではありません)は、テーブルがドロップされたときのようです

  • 内部(管理)テーブルのデータがHDFSファイルシステムから削除されます
  • 一方、外部テーブルのデータはHDFSファイルシステムから削除されません。

(注: https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+DDL の「Managed and External Tables」セクションを参照してください。他の違いは完全には理解できませんでした)

Hiveは、次の優先順位に基づいてテーブルを作成する必要がある場所を上から下に選択すると信じています

  1. テーブル作成中に定義された場所
  2. テーブルが作成されるデータベース/スキーマ作成で定義された場所。
  3. デフォルトのHiveウェアハウスディレクトリ(Hive.site.xmlのプロパティHive.metastore.warehouse.dir)

「Hiveテーブルの作成」中に「ロケーション」オプションが使用されない場合、上記の優先順位ルールが使用されます。これは、内部テーブルと外部テーブルの両方に適用されます。つまり、内部テーブルは必ずしもウェアハウスディレクトリに存在する必要はなく、他の場所に存在できます。

注:いくつかのシナリオを見逃している可能性がありますが、限定的な調査に基づいて、内部テーブルと外部テーブルの両方の動作は、上記の1つの違い(データ削除)を除いて同じようです。内部テーブルと外部テーブルの両方で次のシナリオを試しました。

  1. 場所オプションを使用したテーブルと使用しないテーブルの作成
  2. パーティションオプションの有無にかかわらずテーブルを作成する
  3. Hive LoadおよびInsertステートメントを使用して新しいデータを追加する
  4. Hiveの外部のテーブルの場所にデータファイルを追加し(HDFSコマンドを使用)、「MSCK REPAIR TABLEコマンドを使用してテーブルを更新する
  5. テーブルをドロップする
2
NallaAnand

Hiveの外部テーブルの最適な使用例は、CSVまたはテキストのいずれかのファイルからテーブルを作成する場合です。

1
anubhav

外部表に最適なこのシナリオを検討してください。

MapReduce(MR)ジョブは巨大なログファイルをフィルター処理し、nサブログファイルを吐き出します(たとえば、各サブログファイルには特定のメッセージタイプのログが含まれます)。出力、つまりnサブログファイルはhdfsに保存されます。

これらのログファイルは、さらに分析を実行するためにHiveテーブルに読み込まれます。このシナリオでは、実際のログファイルは外部プロセス(MRジョブなど)によって生成および所有されるため、外部テーブルをお勧めします。生成された各ログファイルをそれぞれのHiveテーブルにもロードする追加のステップ。

1
Suresh Vadali

また、Hiveはビッグデータウェアハウスであることに注意してください。テーブルを削除する場合、ギガバイトまたはテラバイトのデータを失いたくありません。その規模でのデータの生成、移動、コピーには時間がかかる場合があります。 「管理」テーブルをドロップすると、Hiveはそのデータを破棄します。 「外部」テーブルを削除すると、Hiveメタストアのスキーマ定義のみが削除されます。 hdfsのデータはまだ残っています。

1

外部Hiveテーブルには、テーブルをドロップしてもファイルが削除されないという利点があります。serde.... delimitedなどの異なる設定で行形式を設定できます。

1
user3485352

内部テーブルは、削除を含むデータの完全なライフサイクルをHiveで管理する場合に役立ちますが、外部テーブルは、ファイルがHiveの外部で使用されている場合に役立ちます。

1

Hiveはメタデータのみをメタストアに保存し、外部テーブルを使用する場合は元のデータをHiveの外側に保存します

0
user5080458

管理テーブルの場合、Hiveはデータのライフサイクルを制御します。 Hiveは、デフォルトでHive.metastore.warehouse.dirで定義されたディレクトリの下のサブディレクトリに管理テーブルのデータを保存します。

管理対象テーブルを削除すると、Hiveはテーブル内のデータを削除しますが、管理対象テーブルは他のツールと共有するには不便です。たとえば、主にPigによって作成および使用されるデータがあるが、それに対していくつかのクエリを実行したいが、データのHive所有権を与えたくないとしましょう。

その時点で、そのデータを指すが所有権を持たない外部テーブルが定義されます。

0
Ankit Nandwal

Hiveでは、外部テーブルを作成することもできます。ウェアハウスディレクトリ外の既存の場所にあるデータを参照するようにHiveに指示します。外部テーブルを削除すると、メタデータは削除されますが、データは削除されません。

HDFSにすでにデータがある場合、外部Hiveテーブルを作成してデータを記述することができます。外部テーブルのデータは、デフォルトのウェアハウスディレクトリではなく、LOCATIONプロパティで指定されるため、EXTERNALと呼ばれます。

内部テーブルにデータを保持する場合、Hiveはテーブルとデータのライフサイクルを完全に管理します。これは、内部テーブルが削除されるとデータが削除されることを意味します。外部テーブルが削除されると、テーブルメタデータは削除されますが、データは保持されます。ほとんどの場合、外部テーブルは、誤ってテーブルと一緒にデータを削除することを避けるために推奨されます。

0
Sayat Satybald