2013-07-08 5 views
4

아래의 정규식 (탭 구분)을 사용하여 제공된 데이터 (구문 분리 된 탭)를 구문 분석합니다.실행 오류 : org.apache.hadoop.hive.ql.exec.DDLTask

하이브 테이블 생성 구문 : 어떤 코멘트 (번부터 라인)이 원하는 정규식 통해

create table akmlogreg(logdate string, time string, clientip string, method string, uri string, status string, bytes string, TimeTakenMS string, referer string, useragent string, cs_Cookie string) ROW FORMAT SERDE 
'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
"input.regex" ="([0-9-]+) ([^\t]*) ([^\t]*) ([^\t]*) ([^\t]*) ([^\t]*) ([^\t]*) ([^\t]*) (\".*\"|[^ ]*) (\".*\"|[^ ]*) ([^\r\n]+)", 
"output.format.string"="%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$s %11$s"); 

제거하고, 한 번에 하나의 행을 선택한다. 그러나이 구문은 하이브에 테이블을 만들려고하면 오류가 발생합니다. 탭 구분 정규식 뒤에서 내 논리는 또한 내 로그 데이터를 탭 구분 된 것입니다. 아무도 나에게 더 suggesion 또는 솔루션을 내가 정규식을 사용하여 별도의 탭입니다 이런 종류의 데이터를 구문 분석 할 수 있습니까?

예외 :

FAILED: Error in metadata: java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 10 
([0-9-]+)]+) 
     ^
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask 

데이터 :

#Version: 1.0 
#Fields: date time cs-ip cs-method cs-uri sc-status sc-bytes time-taken cs(Referer) cs(User-Agent) cs(Cookie) 
2013-07-02 00:00:00 242.242.242.242 GET /9699/14916.jpg 200 6783 0 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.23 Safari/534.10" "-" 
2013-07-02 00:00:00 242.242.242.242 GET /169875/2006-2010-679336-640x428.JPG 200 78221 355 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36" "-" 
2013-07-02 00:00:00 242.242.242.242 GET /169875/2006-2010-679339-640x428.JPG 200 86791 238 "-" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.52 Safari/537.36" "-" 

답변

3

이 시도 :

^([0-9-]+)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t([^\t]*)\t(\".*?\"|[^ ]*)\t(\".*?\"|[^ ]*)\t([^\r\n]+)$ 

Regular expression image

+1

감사합니다 알렉스. 그것은 효과가 있었다. 그런데 하이브가 탭 분리 정규 표현식을 사용하지 않는 이유는 무엇입니까? – Naresh

+1

하이브 (hive)에 대해서는 말할 수 없지만 일반적으로 어림짐작으로서 정규 표현식을 쓸 때 항상 일치시킬 문자를 명시 적으로 지정합니다. 어떤 정규 표현식을 사용하든 관계 없습니다. – Stephan