我使用HCatalog
讀取和寫入數據,從豬腳本蜂巢如下攆表:問題保存到豬
A = LOAD 'customer' USING org.apache.hcatalog.pig.HCatLoader();
B = LOAD 'address' USING org.apache.hcatalog.pig.HCatLoader();
C = JOIN A by cmr_id,B by cmr_id;
STORE C INTO 'cmr_address_join' USING org.apache.hcatalog.pig.HCatStorer();
表定義客戶是:
cmr_id int
name string
地址:
addr_id int
cmr_id int
address string
cmr_address_join:
cmr_id int
name string
addr_id int
address string
當我運行此,豬引發以下錯誤:
ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1115: Column names should all be in lowercase. Invalid name found: A::cmr_id
我認爲這可能是因爲豬是試圖以配合蜂巢欄豬生成的文件名和它不完全匹配(A::cmr_id versus cmr_id
)。我認爲HCatalogStorer
預計的別名是cmr_id
而不是A::cmr_id
。我希望HCatalogStorer
忽略別名前綴並只考慮字段名稱。
grunt> DESCRIBE C;
C: {A::cmr_id: int,A::name: chararray,B::addr_id: int,B::cmr_id: int,B::address: chararray}
有沒有辦法在Pig中刪除字段的前綴(即A::)?或者,如果某人有解決方法或解決方案,那就太好了。
我知道我們可以使用以下內容來明確地添加一個別名並使其工作。
D = foreach C generate A::cmr_id as cmr_id,A::name as name, B::addr_id as addr_id, B::address as address;
STORE D INTO 'cmr_address_join' USING org.apache.hcatalog.pig.HCatStorer();
但我的問題是,我有許多表,每個表都有數百列。如上所述指定別名會很繁瑣。
任何幫助解決這個將不勝感激。
請參閱此問題的解決方案。http://stackoverflow.com/questions/38902046/pig-how-to-remove-in-the-column-name/40538122#40538122 – user584583 2016-11-11 00:15:54