2014-04-07 3 views
1

패턴에 맞는 로그를로드해야합니다. 불행히도 일부 기록은 그렇지 않습니다. HCatalog에 데이터를 저장하려고 할 때 오류가 발생합니다.돼지에 잡아 먹을 래?

패턴에 맞는 레코드를 HCalatlog에 저장하고 추가 처리를 위해 파일을 다른 파일로 유지할 수 있습니까?

돼지에서 try-catch와 같은 작업을 수행 할 수 있습니까?

내가 해결책을 찾을 수는 없지만 간단해야합니다. - 아무도 그 문제를 더 일찍 겪지 않았다고 믿습니다!

나는 어떤 힌트에도 감사 할 것입니다.

답변

3

수정 된 답변
사람들은 이전에이 문제에 직면 해 왔지만 대답은 일반적으로 "UDF"입니다. 불행히도, 아마도 귀하의 질문에 대한 최선의 대답 : 자바 또는 파이썬 try/catch 오류 처리를 사용하여 데이터 유효성 검사를 수행 UDF 생각합니다.

또 다른 대답은 SPLIT을 사용하여 필드의 데이터를 평가하고 해당 별칭으로 데이터를 전달하는 것입니다. 이는 예상치 못한 데이터를 처리하는 일반적인 방법입니다.

원래 답변 : 돼지의 버전 0.12에서
, 당신은/시도 캐치만큼 좋은하지 않은 ASSERT 연산자를 가지고,하지만없는 것보다는 낫다. 워드 프로세서

:

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;

여분의 기록을 가지고있는 라인을 분리합니다.

추악하지만이 특별한 경우에는 효과가 있습니다.