web-dev-qa-db-ja.com

HIVE-INSERT OVERWRITE vs DROP TABLE + CREATE TABLE + INSERT INTO

私はHiveでいくつかのクエリの自動スクリプトを実行していますが、テーブルからデータをクリアして新しいデータを挿入する必要があることがわかりました。そして、私たちは何がより速くなるかを考えていますか?

INSERT OVERWRITE TABLE SOME_TABLE
    SELECT * FROM OTHER_TABLE;

またはこのようにする方が速いです:

DROP TABLE SOME_TABLE;
CREATE TABLE SOME_TABLE (STUFFS);
INSERT INTO TABLE
    SELECT * FROM OTHER_TABLE;

クエリ実行のオーバーヘッドは問題ではありません。作成のためにスクリプトoがあるからです。問題は、数十億行のINSERT OVERWRITEDROP + CREATE + INSERT INTOよりも速いということです。

10
Thiago Baldim

最高の速度を得るには、1)_hadoop fs -rm -r -skipTrash table_dir/*_を最初に発行して、ファイルをゴミ箱に入れずに古いデータをすばやく削除することをお勧めします。次に2)_INSERT OVERWRITE_コマンドを実行します。テーブルを削除/作成する必要がないため、これも高速になります。

更新:

Hive 2.3.0(Hive-15880)以降、テーブルにTBLPROPERTIES ("auto.purge"="true")がある場合、_INSERT OVERWRITE_クエリがテーブルに対して実行されても、テーブルの以前のデータはゴミ箱に移動されません。この機能は、管理テーブルにのみ適用されます。したがって、自動パージを使用したINSERT OVERWRITEは、単一のハイブになるため、_rm -skipTrash_ + _INSERT OVERWRITE_またはDROP + CREATE + INSERTよりも高速に動作します。 -onlyコマンド。

12
leftjoin

エッジに関する1つの考慮事項は、スキーマが変更された場合にINSERT OVERWRITEは失敗しますが、DROP + CREATE + INSERTは失敗しません。これがほとんどのシナリオに当てはまる可能性は低いですが、ワークフロー/テーブルスキーマのプロトタイプを作成している場合は、検討する価値があります。

3
Brendan