다음은 일치시키려는 로그 파일의 두 줄입니다. 각 열을 4 개의 열 (날짜, 호스트 이름, 명령, 상태)으로 구분하려고합니다. 행은 행의 날짜, 호스트 이름, 명령 및 상태 탭으로 구분됩니다. 상태 열에는 공백이 포함될 수 있습니다.하이브 Serde Regex가 문자열 패턴을 인식하지 못합니다.
Rubular 나에서03-24-2014 fm506 TOTAL-PROCESS OK;HARD;1;PROCS OK: 717 processes
03-24-2014 fm504 CHECK-LOAD OK;SOFT;2;OK - load average: 54.61, 56.95
(http://rubular.com/는) 내 정규식 표현은 내가 원하는대로 정확히 일치; 그러나 날짜 열에 대한 내 하이브 테이블을 쿼리 한 후 정규식 문이 HIVE가 찾고있는 것과 일치하지 않는다고 생각하게하는 전체 줄을 얻습니다.
([^] ) \가 ([^] ) \의 ([^] ) \ s의 (. *)
을 S와이 선택의 결과 내 CREATE TABLE 문이다 검색어 :
CREATE EXTERNAL TABLE IF NOT EXISTS sys_results(
date STRING
,hostname STRING
,command STRING
,status STRING
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]*)\\s*([^ ]*)\\s*([^ ]*)\\s*(.*)",
"output.format.string" = "%1$s %2$s %3$s %4$s"
)
STORED AS TEXTFILE
LOCATION '/user/sys_log_output/sys-results/';
select date from sys_results;
03-24-2014 fm506 TOTAL-PROCESS OK;HARD;1;PROCS OK: 717 processes