2016-04-04 5 views
0

私は「database1.table1は」2列と1つのパーティション列を持つテーブルdatabase1.table1データを移動せずに別のパーティションを持つ別のハイブテーブルからハイブテーブルを作成するにはどうすればよいですか?

表を持っている:columnA、columnBはcolumnC

で仕切らノーとテーブル「database2.table2」を作成する必要があります2つの列columnA、columnBを持つパーティションです。私はdatabase1.table1からdatabase2.table2へデータをコピーする必要があります(database1.table1内のデータを削除せずに)

私は以下を試みましたが、データは移動しました。私はちょうどデータをコピーする必要があります

CREATE TABLE DATABASE2.TABLE2 
SELECT COLUMNA, COLUMNB 
FROM DATABASE1.TABLE1 

注:私は実際のデータでテーブルが必要です、私はEXTERNALテーブルを作成することはできません。

+0

外部テーブルに「データがあります」。私はあなたがその点で何を意味しているか分かりません –

+0

私は外部テーブルは、実際のデータを格納しないデータベースビューのようです。 – Mohan

+0

いいえ、外部テーブルにはデータが含まれています。外部テーブルが異なるのは、テーブルを削除するときにデータがディスクから削除されるかどうかだけです。 http://stackoverflow.com/questions/17038414/difference-between-hive-internal-tables-and-external-tables –

答えて

1

あなたは、ほとんどあなたが言っていた方法でデータをコピーできるはずです。単に 'AS'を追加してください。 the CREATE AS SELECT documentationを参照してください。 あなたはデータが移動されたと言っていますが、それはできません。 CREATE AS SELECTはマップ削減ジョブをトリガーします。文書 には、データ形式を変更したり、別のserdeを使用したり、自分のパーティションを (または、要求しているようにパーティションがないこと)することもできます。

USE database2; 
CREATE TABLE table2 
    AS SELECT columna,columnb 
    FROM database1.table1 
+0

私の間違い。ソーステーブルの内容は、他のプロセスによって削除されました。これは私が偶然でcreateコマンドを適用した直後に起こったものです。 – Mohan

関連する問題