2016-06-18 11 views
0

私はHadoopのハイブに新しいです、と私はハイブのinsert intoload data声明について混乱しています。ハイブ違いは

INSERT INTO TABLE_NAME (field1, field2) VALUES(value1, value2);を実行すると、hiveserverはmapReduceタスクを実行します。

私がLOAD DATA LOCAL INPATH PATH_TO_MY_DATA INTO TABLE TABLE_NAME;を実行すると、ファイルからデータをロードするだけで何もしません。

pyhs2を使用し、insertステートメントを使用してデータレコードを保存すると、各レコードはmapReduceタスクを実行し、非常に遅いです。 まずデータをどこかに保存し、後でload dataステートメントを使用してロードする必要がありますか?

答えて

2

ロード ハイブは、テーブルにデータをロードするときに変換を行いません。ロード操作は、現在、純粋なコピー/移動操作であり、データファイルをHiveテーブルに対応する場所に移動します。

挿入

クエリ結果は、挿入句を使用してテーブルに挿入することができます。

INSERT INTO TABLE tablename PARTITION (partcol1[=val1], partcol2[=val2] ...) select_statement FROM from_statement; 

ロード時に、ファイルにコピーされたすべてのデータを表に挿入して、ある条件に基づいてデータを挿入できます。あなたが与えられたHQLを実行し、すべての単一の行のための

ソリューション

ので、毎回マップが実行を減らします。その後、

あなたは、単一のMapReduceでクエリを実行する場合

INSERT INTO TABLE students 
    VALUES ('fred flintstone', 35, 1.28), ('barney rubble', 32, 2.32); 

単一のクエリを作成し、それを実行します。この状態にさらにレコードがある場合、それをバッチにすることができます。

+0

ご迷惑をおかけして申し訳ありません。 – tinyproxy

-2

INSERT上書きは、テーブルまたはパーティション 内の既存のデータを上書きし、INSERT INTO既存 データ(ref at apache.org)を維持表またはパーティションに追加します。