[HADOOP] HIVE로 테이블을 어떻게 분할 할 수 있습니까?
HADOOPHIVE로 테이블을 어떻게 분할 할 수 있습니까?
나는 며칠 동안 하이브와 놀았지만 여전히 파티션이 힘들다.
몇 달 동안 Hadoop에 Apache 로그 (결합 형식)를 기록했습니다. 그들은 행 텍스트 형식으로 저장되며, 날짜별로 구분됩니다 (flume을 통해). / logs / 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)
결합 된 로그 파일의 날짜는 [10 / Feb / 2012 : 00 : 00 : 00 -0800] 형식을 따릅니다.
Hive에서 물리적 파티션을 사용하는 파티션이있는 외부 테이블을 만들려면 어떻게해야합니까? 하이브 파티션에 대한 좋은 문서를 찾을 수 없습니다. 관련 질문을 찾았습니다.
하이브를 사용하여 외부 테이블에 로그를로드하면 좋은 형식 (2 월 <=> 02)이 아니기 때문에 시간과 파티션을 나눌 수 없습니다. 비록 그것이 좋은 형식이라 할지라도 "10/02/2012 : 00 : 00 : 00 -0800"문자열을 여러 디렉토리 "/ 2012 / 02 / 10 / 00"로 변환하는 방법은 무엇입니까?
결국 돼지 스크립트를 사용하여 원시 로그를 하이브 테이블로 변환 할 수 있지만이 시점에서 하이브 대신 돼지를 사용하여 내보고를 수행해야합니다.
해결법
-
==============================
1.내가 올바르게 이해하면 디렉토리 로그에서 4 레벨 깊이에있는 폴더에 파일이 있습니다. 이 경우 테이블을 path 'logs'로 외부 테이블로 정의하고 year, month, day_of_month, hour_of_day의 4 개의 가상 필드로 분할합니다.
내가 올바르게 이해하면 디렉토리 로그에서 4 레벨 깊이에있는 폴더에 파일이 있습니다. 이 경우 테이블을 path 'logs'로 외부 테이블로 정의하고 year, month, day_of_month, hour_of_day의 4 개의 가상 필드로 분할합니다.
파티션은 기본적으로 Flume에 의해 수행됩니다.
EDIT 3/9 : 많은 세부 사항은 Flume이 파일을 쓰는 방법에 달려 있습니다. 그러나 일반적으로 DDL은 다음과 같이 보일 것입니다.
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';
EDIT 3/15 : zzarbi 요청에 따라 테이블이 생성 된 후 생성 된 파티션에 대한 정보를 Hive에 알려야한다는 메모를 추가합니다. Flume 또는 다른 프로세스가 새 파티션을 만드는 한 반복적으로 수행해야합니다. 파티션 질문으로 외부 만들기에 대한 내 대답을 참조하십시오.
from https://stackoverflow.com/questions/9626789/how-can-i-partition-a-table-with-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] hadoop 파일 시스템에서 Java 프로그램의 클래스 경로를 설정하는 방법 (0) | 2019.07.14 |
---|---|
[HADOOP] 수 아파치 flume hdfs 싱크 동적 경로를 쓸 수 있습니까? (0) | 2019.07.14 |
[HADOOP] MapReduce 단계에서 Sort가 사용되는 이유는 무엇입니까? (0) | 2019.07.14 |
[HADOOP] Hadoop의 이클립스 플러그인 설치하기 (0) | 2019.07.14 |
[HADOOP] 집계 후 스파크가있는 하이브 테이블 읽기 및 쓰기 (0) | 2019.07.13 |