118

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

4

18 に答える 18

121

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

パーティション化されたテーブルがある場合、パーティションはデータベースに格納されます (これにより、Hive はファイル システムに移動してパーティションを検索することなく、パーティションのリストを使用できます)。これらの種類のものは「メタデータ」です。

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

外部表を削除すると、メタデータのみが削除されます。つまり、ハイブは現在そのデータを認識していません。データ自体には触れません。

于 2013-06-11T07:31:49.193 に答える
52
于 2016-05-12T16:00:01.327 に答える
6

内部テーブル データはウェアハウス フォルダーに保存されますが、外部テーブル データはテーブル作成で指定した場所に保存されます。

したがって、内部テーブルを削除すると、ウェアハウス フォルダーの下のデータだけでなくスキーマも削除されますが、外部テーブルの場合はスキーマのみが失われます。

そのため、外部テーブルを削除した後に再び元に戻したい場合は、同じスキーマでテーブルを再度作成し、元のデータの場所を指すことができます。それが今はっきりしていることを願っています。

于 2015-06-09T13:12:24.777 に答える
3

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

于 2013-07-24T18:05:05.437 に答える
1

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

于 2014-07-24T21:48:57.390 に答える
1

外部テーブルに最適な次のシナリオを検討してください。

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

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

于 2014-09-15T06:28:45.417 に答える
1

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

于 2014-10-02T16:21:54.567 に答える
1

外部ハイブ テーブルには、テーブルを削除してもファイルが削除されないという利点があります。

于 2014-09-03T09:55:09.447 に答える
1

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

于 2017-09-25T12:36:45.660 に答える
0

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

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

于 2015-12-18T12:56:04.750 に答える
0

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

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

その時点で、そのデータを指す外部テーブルが定義されますが、そのデータの所有権は取得されません。

于 2016-05-05T06:37:30.573 に答える
0

ハイブはメタデータのみをメタストアに格納し、元のデータはハイブの外側に格納します。外部テーブルを使用する場合、これらによって場所を指定できます。テーブルを削除しても、元のデータは影響を受けません。

于 2015-07-04T13:09:01.030 に答える