2016-12-29 84 views
1

我想創建一個外部表並通過豬腳本將數據加載到該表中。我遵循以下方法:使用PIG將數據寫入HIVE外部表


好的。使用HDFS目錄中的某個模式佈局創建外部配置單元表。可以說

create external table emp_records(id int, 
           name String, 
           city String) 
           row formatted delimited 
           fields terminated by '|' 
           location '/user/cloudera/outputfiles/usecase1'; 

只需創建一個像上面這樣的表格,不需要將任何文件加載到該目錄中。

現在寫的是我們的一些輸入目錄中讀取數據,然後當你豬腳本中使用的輸出存儲如下

A = LOAD 'inputfile.txt' USING PigStorage(',') AS(id:int,name:chararray,city:chararray); 
B = FILTER A by id > = 678933; 
C = FOREACH B GENERATE id,name,city; 
STORE C INTO '/user/cloudera/outputfiles/usecase1' USING PigStorage('|'); 

確保最終的foreach該目的地位置,並分隔符和架構佈局的豬腳本語句Pigscript與Hive DDL模式匹配。


我的問題是,當我第一次創建的表,它創造了一個HDFS目錄,當我試圖使用存儲腳本文件,它拋出一個錯誤說「文件夾中已經存在」。它看起來像豬商店總是寫入一個只有特定名稱的新目錄?

有什麼辦法可以避免這個問題嗎?

是否還有其他屬性,我們可以在PIG中使用STORE命令每次寫入特定的diretory /文件?

感謝 拉姆

回答

1

是可以使用HCatalog爲實現您的結果。

記得你必須運行你的豬的腳本,如:

pig -useHCatalog your_pig_script.pig 

,或者如果您使用的是繁重的殼,然後簡單地使用:

pig -useHCatalog 

下一個是你的店命令直接存儲你的關係進配置表使用:

STORE C INTO 'HIVE_DATABASE.EXTERNAL_TABLE_NAME' USING org.apache.hive.hcatalog.pig.HCatStorer();