2013-10-07 36 views
1

後比方說,我有一個表:豬:負載表,然後覆蓋該表改造

db.table 

我加載表,並做一些關於它的變換,最後,嘗試存儲它

mytable = LOAD 'db.table' USING HCatLoader(); 

. 
. 
-- My transforms 
. 
. 

STORE mytable_final INTO 'db.table' USING HCatStorer(); 

但代碼抱怨我正在寫入一個包含現有數據的表格。

我已經看過這個JIRA ticket,這似乎是不活動的(我已經試過在STORE命令的幾個地方使用FORCE和OVERWRITE)。

我也看過this SO帖子,但作者正在從一個位置加載並存儲在不同的位置。如果我使用該帖子中的內容,那麼轉換的結果就是沒有數據。刪除文件不是一個選項。我正在考慮臨時存儲文件,但我不知道這是否是最佳選擇。

我想要使用INSERT OVERWRITE得到您在Hive中獲得的行爲。

+0

你爲什麼說「刪除文件不是一個選項」? –

+0

應該澄清 - 在執行存儲之前刪除文件,強制Pig在DAG上執行(即轉換),這不是一個選項。如果我們這樣做,結果我們沒有得到任何結果。 –

+0

我面臨類似的問題,我得到異常。 org.apache.hcatalog.common.HCatException:2003:非分區表已經包含data:tablename。當我將表格更改爲外部表格異常消失後,腳本仍然失敗,沒有任何異常堆棧跟蹤。 –

回答

2

我不熟悉HCatLoaderHCatStorer。但是,如果您將LOADSTORESTORE複製到HDFS,Pig會提供shell命令,使您可以在腳本中執行刪除和移動操作。

STORE A INTO '/this/path/is/temporary'; 
RMF '/this/path/is/permanent'; 
MV '/this/path/is/temporary' '/this/path/is/permanent';