2012-03-08 3 views
6

나는 며칠 동안 Hive를 사용 해왔다. 그러나 나는 여전히 파티션으로 힘든 시간을 보냈다.HIVE로 테이블을 어떻게 분할 할 수 있습니까?

몇 달 동안 Hadoop에 Apache 로그 (결합 형식)를 기록했습니다. 이들은 (수로를 통해) 일에 의해 구획, 행 텍스트 형식으로 저장되어 /로그/YYYY/MM/DD/HH/*

예 :

/logs/2012/02/10/00/Part01xx (02/10/2012 12:00 am) 
/logs/2012/02/10/00/Part02xx 
/logs/2012/02/10/13/Part0xxx (02/10/2012 01:00 pm) 

combined log 파일 날짜 따르고 이 형식 [2012 년 10 월 2 일 : 00 : 00 : 00 -0800]

내 실제 파티션을 사용하는 파티션이있는 파티션으로 외부 테이블을 만들 수있는 방법은 무엇입니까? 하이브 파티션에서 좋은 문서를 찾을 수 없습니다. 내가 하이브의 외부 테이블에 내 로그를로드하는 경우가 좋은 형식이 아니다 이후

, 나는 (시간으로 분할 할 수 없습니다 나는 관련 질문 등 발견 Feb < => 02). 비록 그것이 좋은 형식이라 할지라도 "10/02/2012 : 00 : 00 : 00 -0800"문자열을 "/ 2012/02/10/00"다중 디렉토리로 변환하는 방법은 무엇입니까?

돼지 스크립트를 사용하여 원시 로그를 하이브 테이블로 변환 할 수 있지만이 시점에서 하이브 대신 돼지를 사용하여 내보고를 수행해야합니다.

답변

5

제대로 이해하면 디렉토리 로그에서 4 레벨 깊이의 폴더에 파일이 있습니다. 이 경우 테이블을 경로 '로그'로 외부 테이블로 정의하고 년, 월, 일, 월, 일의 4 가지 가상 필드로 분할합니다.

기본적으로 Flume이 파티션을 분할합니다.

EDIT 3/9 : 많은 세부 사항은 Flume이 파일을 쓰는 방법에 따라 다릅니다.

CREATE TABLE table_name(fields...) 
PARTITIONED BY(log_year STRING, log_month STRING, 
    log_day_of_month STRING, log_hour_of_day STRING) 
format description 
STORED AS TEXTFILE 
LOCATION '/your user path/logs'; 

편집 3/15 : 그러나 일반적인 용어로, 당신의 DDL 이런 식으로 뭔가 보일 것 zzarbi의 요청에 따라을, 나는 테이블을 만든 후 것을 메모를 추가 해요, 하이브는 연락 필요 생성 된 파티션에 대해. Flume 또는 다른 프로세스가 새 파티션을 만드는 한 반복적으로 수행해야합니다. Create external with Partition 질문에 대한 내 대답을보십시오.

+0

그래서 나는 테이블을 만들 것 같습니까? 나는 그 파티션을 사용하기 위해 쿼리를 할 것인가? – zzarbi

+0

답변을 편집하십시오. – Olaf

+0

내가 할 수있는 한 빨리 답변을 드리겠습니다. – zzarbi