2014-04-16 3 views
0

파이프로 구분 된 데이터에 하이브 SerDe RegEx를 구성해야합니다.하이브에서 파이프로 구분 된 데이터의 정규식

샘플 데이터 :

CEF : 0 | 마이크로 소프트 | 마이크로 소프트 Windows가 || 마이크로 소프트 윈도우 보안 - 감사 : 434 | 계정이 기록 된 오프 | 낮은 |. eventId = 260 externalId = 44 msg = 네트워크 : 사용자 또는 컴퓨터 이 컴퓨터에 네트워크로 로그온 한 상태입니다. categorySignificance =/정보 categoryBehavior =/액세스/중지 categoryDeviceGroup =/운영 체제 catdt = 운영 체제 categoryOutcome/성공 categoryObject =/호스트/운영 | Vista ad.EventIndex = -972 ad.WindowsParserFamily = Windows 2008 R2 | 2008 | 7 | 비스타 ad.WindowsVersion = 윈도우 서버 우리가 하나의 열로 그 후 파이프에 의해 처음 7 열을 분리하고 모든 것을 고려할 필요가있다이를 위해

. (CEF의 STRING, 공급 업체 STRING, 제품 STRING, 버전 STRING, 서명 STRING, 이름 STRING, 심각도 STRING, 확장 STRING)

그래서 샘플 데이터 출력이 컬럼에 매핑해야합니다 DDL은

COL1 : CEF : 0 Col2의 : 마이크로 소프트 열 3 : 마이크로 소프트 윈도우 Col4 : COL5 : 마이크로 소프트 윈도우 보안 - 감사 : 434 Col6 다음과 같이 계정은 로그 오프했다. Col7 : 낮음 Col8 : eventId = 260 externalId = 44 msg = 네트워크 : 네트워크에서이 컴퓨터에 로그온 한 사용자 또는 컴퓨터. categorySignificance =/정보 categoryBehavior =/액세스/중지 categoryDeviceGroup =/운영 체제 catdt = 운영 체제 categoryOutcome/성공 categoryObject =/호스트/운영 | Vista ad.EventIndex = -972 ad.WindowsParserFamily = Windows 2008 R2 | 2008 | ad.WindowsVersion = Windows Server

input.regex는 무엇이되어야합니까?

이 정규식을 사용하여 (key = value) 형식의 열에 대한 Map 데이터 형식을 가질 수도 있습니다.

+1

샘플 출력하시기 바랍니다 선생님! – aelor

+0

코드가 실패한 곳은 어디입니까? – Robin

+0

@aelor는 샘플 데이터의 예상 출력을 추가했습니다. –

답변

0

나는 하이브 아무의 expirience이 없지만, 몇 가지 예를 찾고 input.regex에 대해 다음 값이 작동 갈까요 :

([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\|([^\\|]*)\\|(.*) 

당신은 output.format.string을 구성해야 할 수도 있습니다. 아마 다음 링크는 도움 :

+0

훌륭한 답변이지만 대답을 읽는 사람들을위한 메모 : OP는 언급하지 않지만 CEF는 이스케이프 파이프를 허용합니다. 머리글의 파이프 구분 섹션 내에서 (똑똑한 방법은 무엇입니까?) Regex는이를 처리하지 못합니다. Sep 19 08:26:10 호스트 CEF : 0 | 보안 | 위협 관리 | 1.0 | 100 | 탐지 됨 \ | 메시지에서 | 10 | src = 10.0.0.1 act = blocked a | dst = 1.1.1.1 –

+0

또한 Java로 CEF 파서를 만들었으므로 더 이상 사람들이 지옥에서이 형식을 구문 분석하지 않아도됩니다. :-) https://github.com/fluenda/ParCEFone –

관련 문제