2013-10-31 21 views
0

我使用HDP 2.0並運行簡單的Pig Script。HDP2.0中的Hive列式加載程序

我已經註冊了下面的罐子,我再執行下面的代碼(更新架構) -

register /usr/lib/pig/piggybank.jar; 
     register /usr/lib/hive/lib/hive-common-0.11.0.2.0.5.0-67.jar; 
     register /usr/lib/hive/lib/hive-exec-0.11.0.2.0.5.0-67.jar; 

     A = LOAD '/apps/hive/warehouse/test.db/hivetables' USING   
     org.apache.pig.piggybank.storage.HiveColumnarLoader('id int, name string,age 
     int,create_dt string,timestamp string,accno int'); 

     F = FILTER A BY (id == 85986249); 

     STORE F INTO '/user/test/Pigout' USING PigStorage(); 

的問題是,雖然對於F的值在蜂巢表可用,結果總是將0條記錄寫入輸出。但它能夠將所有記錄加載到A.

基本上,Filter函數不起作用。我的Hive表未分區。我相信這個問題可能在HiveColumarLoade中,但無法弄清楚它是什麼。

如果您知道解決方案,請讓我知道。我正在爲此苦苦掙扎。

非常感謝您的幫助!

+0

什麼是您加載表的完整的模式?請發佈。 –

+0

嗨,我也發佈了架構。謝謝! – user2732748

回答

0

基於pig 0.12 documentation在您可以過濾非分區值之前,HiveColumnarLoader似乎需要中間關係。鑑於該ID不是看起​​來是你的問題的分區。

試試這個:

A = LOAD '/apps/hive/warehouse/test.db/hivetables' USING   
     org.apache.pig.piggybank.storage.HiveColumnarLoader('id int, name string,age 
     int,create_dt string,timestamp string,accno int'); 

B = FOREACH GENERATE A.id, A.name, A.age, A.create_dt, A.timestamp, A.accno; 

F = FILTER A BY (id == 85986249); 

     STORE F INTO '/user/test/Pigout' USING PigStorage(); 

文檔的一切似乎是說,處理的實際值則需要中間的關係B.