2016-09-21 27 views
1

私はハイブでいくつかのクエリの自動スクリプトをいくつか実行しており、テーブルからデータをクリアして新しいテーブルを挿入する必要があることがわかりました。そして、我々はもっと速くなることができると考えていますか?HIVE - INSERT OVERWRITEとDROP TABLE + CREATE TABLE + INSERT INTO

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; 

クエリを実行しているのオーバーヘッドは問題ではありません。私たちはスクリプト作成も行っているからです。問題は、十億行あるINSERT OVERWRITEDROP + CREATE + INSERT INTOより速いということですか?

+1

'Insert OVERWRITE'以前のデータがHDFSから削除され、テーブル/パーティションで新しいデータのみが削除されていることを確認してください。 'DROP + CREATE + INSERT INTO'は同じことを保証しないかもしれません。 – Ambrish

答えて

2

最大速度の場合は、最初にhadoop fs -rm -r -skipTrash table_dir/*を発行して、古いデータを高速で削除することをお勧めします。これは、INSERT OVERWRITEがすべてのファイルをごみ箱に入れ、非常に大きなテーブルの場合は時間がかかるためです。その後、2)INSERT OVERWRITEコマンドを実行します。テーブルを削除/作成する必要がないため、これも高速になります。