2013-04-12 69 views
0

這裏是我的方案:從S3存儲桶中的文件夾的一個蜂巢S3數據插入不斷覆蓋數據

  1. 我加載數據。我們稱這個桶爲'new_data'。

    CREATE EXTERNAL TABLE NEW_DATA (COL1串)來終止BY '\ T' LOCATION行格式分隔字段 'S3,//一些桶/文件夾'

  2. 接下來,我從在其他文件夾中加載數據S3,我們稱之爲'data_already_imported'。

    CREATE EXTERNAL TABLE data_already_imported(COL1串)來終止BY '\ T' LOCATION 行格式分隔字段 'S3,//一些桶/另一個文件夾'

  3. 然後,我發現之間的差NEW_DATA和data_already_imported

    創建 ( 選擇N AS SELECT *表差。* FROM NEW_DATAñ LEFT OUTER JOIN data_already_imported舊 ON n.col1 = old.col1 WHERE old.col1 IS NULL )i;

現在,我想把這個'差異'移到data_already_imported文件夾中。目前我有

INSERT INTO TABLE data_already_imported 
SELECT * FROM difference; 

問題是這覆蓋data_already_imported中已存在的數據。注:我也嘗試過INSERT OVERWRITE。有人可以請指出我在這裏做錯了什麼嗎?

回答

1

在Hive中,沒有將記錄追加到已填充的表中的事情。你必須創建另一個表(假設它會被稱爲new_data_already_imported),那麼這樣做:

INSERT OVERWRITE TABLE new_data_already_imported 
    SELECT * FROM (
    SELECT * FROM data_already_imported UNION ALL 
    SELECT * FROM difference); 
+0

感謝您的答覆拉森。這是我的想法,但只是想檢查是否有一種方法來追加記錄。無論如何,接受答案。謝謝! – test123

+2

實際上可以通過手動將文件添加到包含該表的HDFS目錄(可能類似於「apps/hive/warehouse/table_name」)來附加記錄。你必須小心這樣做,特別是如果涉及分區,或者你可以認真弄亂你的桌子。除非你絕對需要表現,否則請與拉森的解決方案一起去。 –