2014-04-07 78 views
1

我必須加載一個適合模式的日誌。不幸的是一些記錄沒有。 當我嘗試在HCatalog中存儲數據時,它會發生錯誤。試試趕上豬?

是否可以將符合該模式的記錄存儲在HCalatlog中,並將其他文件保存在文件中以供進一步處理?

或者也許有可能在豬身上做一些類似try-catch的事情?

我找不到任何解決方案,但它一定很簡單 - 我只是不相信任何人沒有面對這個問題!

我將不勝感激任何提示。

回答

3

編輯答案
以前人們都遇到過這個問題,但答案通常是「UDF」。不幸的是,我認爲這可能是您的問題的最佳答案:使用java或python try/catch錯誤處理執行數據驗證的UDF。

另一個答案是使用SPLIT來評估字段中的數據並將數據導入適當的別名。這是處理非預期數據的常用方法。

原來的答案:
豬.12版本,你有ASSERT運營商,這是不一樣的try/catch一樣好,但總比沒有好。

從文檔:

Suppose we have relation A. 

A = LOAD 'data' AS (a0:int,a1:int,a2:int); 

DUMP A; 
(1,2,3) 
(4,2,1) 
(8,3,4) 
(4,3,3) 
(7,2,5) 
(8,4,3) 
Now, you can assert that a0 column in your data is >0, fail if otherwise 

ASSERT A by a0 > 0 'a0 should be greater than 0'; 
+0

JamCon - 感謝您的回答。正如你所說 - 最好沒有什麼,但我正在尋找一些一般的錯誤管理王。在我的情況下,日誌包含比預期更多的列,所以它不適合模式。如果我不知道可能有什麼問題,我將無法使用ASSERT。它真的相信,豬不提供這樣的基本功能......或者可以,但我找不到它...... –

1

在JamCon的答案的ASSERT方法通常是有幫助的,但正如你所說,你的具體問題,不能因此而解決。如果您只是想測試是否存在額外的列,則一種可能的解決方法是正常加載數據,但在AS子句中,添加一個名爲error:chararray的額外列。通常情況下,你會希望這是NULL,但如果有額外的列,它不會。所以

SPLIT a INTO good IF error IS NULL, bad IF error IS NOT NULL;

分離出具有額外的記錄行。

醜,但在這種特殊情況下,它應該爲你工作。