我必須加載一個適合模式的日誌。不幸的是一些記錄沒有。 當我嘗試在HCatalog中存儲數據時,它會發生錯誤。試試趕上豬?
是否可以將符合該模式的記錄存儲在HCalatlog中,並將其他文件保存在文件中以供進一步處理?
或者也許有可能在豬身上做一些類似try-catch的事情?
我找不到任何解決方案,但它一定很簡單 - 我只是不相信任何人沒有面對這個問題!
我將不勝感激任何提示。
我必須加載一個適合模式的日誌。不幸的是一些記錄沒有。 當我嘗試在HCatalog中存儲數據時,它會發生錯誤。試試趕上豬?
是否可以將符合該模式的記錄存儲在HCalatlog中,並將其他文件保存在文件中以供進一步處理?
或者也許有可能在豬身上做一些類似try-catch的事情?
我找不到任何解決方案,但它一定很簡單 - 我只是不相信任何人沒有面對這個問題!
我將不勝感激任何提示。
編輯答案
以前人們都遇到過這個問題,但答案通常是「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';
在JamCon的答案的ASSERT
方法通常是有幫助的,但正如你所說,你的具體問題,不能因此而解決。如果您只是想測試是否存在額外的列,則一種可能的解決方法是正常加載數據,但在AS
子句中,添加一個名爲error:chararray
的額外列。通常情況下,你會希望這是NULL
,但如果有額外的列,它不會。所以
SPLIT a INTO good IF error IS NULL, bad IF error IS NOT NULL;
分離出具有額外的記錄行。
醜,但在這種特殊情況下,它應該爲你工作。
JamCon - 感謝您的回答。正如你所說 - 最好沒有什麼,但我正在尋找一些一般的錯誤管理王。在我的情況下,日誌包含比預期更多的列,所以它不適合模式。如果我不知道可能有什麼問題,我將無法使用ASSERT。它真的相信,豬不提供這樣的基本功能......或者可以,但我找不到它...... –