Hive内表と外見の違い

2248 ワード

一、区別
1、テーブル構造の作成
①Hiveでテーブルを作成する:
hive> create table wyp(id int,
    > name string,
    > age int,
    > tele string)
    > ROW FORMAT DELIMITED
    > FIELDS TERMINATED BY '\t'
    > STORED AS TEXTFILE;
OK
Time taken: 0.759 seconds

②外部テーブル作成externalキーワード説明およびlocation'/home/wyp/external'
hive> create external table exter_table(
    > id int,
    > name string,
    > age int,
    > tel string)
    > location '/home/wyp/external';
OK
Time taken: 0.098 seconds

外部テーブルを作成するには、テーブルの作成時にexternalキーを付け、外部テーブルにデータを格納するパスを指定する必要があります(もちろん、外部テーブルの格納パスを指定しなくてもいいです.これにより、HiveはHDFS上の/user/hive/warehouse/フォルダの下に外部テーブルのテーブル名でフォルダを作成し、このテーブルに属するデータをここに格納します).
2.データのインポートとエクスポート
①データのインポート
内部テーブルはデータをインポートし、データは自分のデータウェアハウスディレクトリの下に移動し、hiveが自分で管理する.
load data local inpath '/home/wyp/data/wyp.txt' into table wyp;
外部テーブルインポートデータ:load data local inpath'/home/wyp/data/wyp.txt' into table exter_table;
外部テーブルにデータをインポートすると、データは自分のデータウェアハウスディレクトリの下に移動しません.つまり、外観のデータは自分で管理されていません.
②データ書き出し
内部テーブルのエクスポート:
データは、ローカルファイルシステムからHDFSにコピーする/home/hdfs/wypである.txtファイル内
外部テーブルのエクスポート:
データは、ローカルファイルシステムからHDFSにコピーする/home/hdfs/wypである.txtファイルでは、最後のデータは外部テーブルの/user/hive/warehouse/exter_に移動しません.テーブルを作成するときにデータの保存パスを指定しない限り、tableフォルダにあります.HDFSで見ると、外部テーブルの場合、データはテーブル作成時に指定されたディレクトリに移動されます(この例は/home/wyp/externalフォルダに格納されます).
3.テーブルの削除
①内部テーブルの削除
hive> drop table wyp;
Moved: 'hdfs://mycluster/user/hive/warehouse/wyp' to 
        trash at: hdfs://mycluster/user/hdfs/.Trash/Current
OK
Time taken: 2.503 seconds

②外部テーブルの削除
hive> drop table exter_table;
OK
Time taken: 0.093 seconds

テーブルを削除すると、Hiveはテーブルに属するメタデータとデータをすべて削除します.外部テーブルを削除する場合、Hiveは外部テーブルのメタデータだけを削除し、データは削除されません!
まとめ:
1、外部テーブルにデータをインポートしても、データは自分のデータウェアハウスディレクトリの下に移動していない.つまり、外部テーブルのデータは自分で管理するものではなく、テーブルは異なる.2、テーブルを削除するとき、Hiveはテーブルに属するメタデータとデータをすべて削除します.外部テーブルを削除する場合、Hiveは外部テーブルのメタデータだけを削除し、データは削除されません!では、どのテーブルを使うかどうすればいいのでしょうか.多くの場合、あまり違いがないので、選択は個人の好みの問題にすぎません.しかし、経験として、すべての処理をHiveで完了する必要がある場合は、外部テーブルを使用しないでテーブルを作成する必要があります.