[HADOOP] 타임 스탬프 필드로 분할 표
HADOOP타임 스탬프 필드로 분할 표
일부 요약 수치를 생성하기 위해 우리는 하이브에 주기적으로 데이터를 가져올 수 있습니다. 우리는 현재 CSV 파일 형식을 사용하여 다음과 같이 레이아웃은 다음과 같습니다
operation,item,timestamp,user,marketingkey
현재 우리는 타임 스탬프 필드의 날짜 (YYYY-MM-DD)를 통해 그룹화를 수행하는 몇 가지 질문이.
가져 오는 파일은 때때로 일 이상을 유지하고 나는 분할 방식에 저장하고 싶습니다. 나는 다음과 같은 DDL에 따라 테이블을 구축해야, 하이브로 할 수있는 방법이 있나요 :
CREATE TABLE
partitionedTable (name string)
PARTITIONED BY (time bigint)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
데이터 로딩과 같이 수행되었다 :
LOAD DATA LOCAL INPATH
'/home/spaeth/tmp/hadoop-billing-data/extracted/testData.csv'
INTO TABLE partitionedTable PARTITION(time='2013-05-01');
그러나 나는 그 하이브가 수입되고있는 파일 내에서 제공되는 필드를 기준으로 자동 방식으로 파티셔닝을 적용하고 싶습니다. 예를 들면 :
login,1,1370793184,user1,none --> stored to partition 2013-06-09
login,2,1360793184,user1,none --> stored to partition 2013-02-13
login,1,1360571184,user2,none --> stored to partition 2013-02-11
buy,2,1360501184,user2,key1 --> stored to partition 2013-02-10
해결법
-
==============================
1.그것은 당신이 동적 파티션을 찾고있는 것 같아, 그리고 하이브는이 문서에 설명 된대로 동적 파티션 삽입을 지원합니다.
그것은 당신이 동적 파티션을 찾고있는 것 같아, 그리고 하이브는이 문서에 설명 된대로 동적 파티션 삽입을 지원합니다.
첫째, 당신은 당신이 전혀 파티션으로 평면 데이터를 저장합니다 임시 테이블을 작성해야합니다. 귀하의 경우에는이 될 것이다 :
CREATE TABLE flatTable (type string, id int, ts bigint, user string, key string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
그런 다음이 디렉토리로 플랫 데이터 파일을로드해야합니다 :
LOAD DATA LOCAL INPATH '/home/spaeth/tmp/hadoop-billing-data/extracted/testData.csv' INTO TABLE flatTable;
그 시점에서 당신은 동적 파티션 삽입을 사용할 수 있습니다. 염두에 두어야 할 몇 가지 다음과 같은 속성을해야한다는 점입니다 :
그래서 다음과 같은 쿼리를 실행할 수 있습니다 :
SET hive.exec.dynamic.partition=true; SET hive.exec.dynamic.partition.mode=nonstrict; FROM flatTable INSERT OVERWRITE TABLE partitionedTable PARTITION(time) SELECT user, from_unixtime(ts, 'yyyy-MM-dd') AS time
이 2 개 맵리 듀스 작업을 산란한다, 그리고 마지막에 당신의 라인을 따라 뭔가를 볼 수 :
Loading data to table default.partitionedtable partition (time=null) Loading partition {time=2013-02-10} Loading partition {time=2013-02-11} Loading partition {time=2013-02-13} Loading partition {time=2013-06-09}
그리고 당신의 파티션이 실제로 여기에 있는지 확인합니다 :
$ hadoop fs -ls /user/hive/warehouse/partitionedTable/ Found 4 items drwxr-xr-x - username supergroup 0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-02-10 drwxr-xr-x - username supergroup 0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-02-11 drwxr-xr-x - username supergroup 0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-02-13 drwxr-xr-x - username supergroup 0 2013-11-25 18:35 /user/hive/warehouse/partitionedTable/time=2013-06-09
그 동적 파티션은 하이브 0.6부터 지원됩니다주의, 그래서 당신은 이전 버전이 있으면이 아마 작동하지 않을하시기 바랍니다.
from https://stackoverflow.com/questions/20193613/table-partitioned-by-timestamp-field by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] 의사 분산 HBase를 실행 오류 (0) | 2019.10.04 |
---|---|
[HADOOP] 하둡 복제 모델 - DataStreamer / 네임 노드 (0) | 2019.10.04 |
[HADOOP] 어떻게 마루 파일에서 스키마 / 열 이름을받을 수 있나요? (0) | 2019.10.04 |
[HADOOP] 아파치 스파크에서 밑줄로 시작하는 파일에 액세스 (0) | 2019.10.04 |
[HADOOP] 공기 흐름 DAG 실행을 사용하여 EMR 클러스터 창조, 작업이 완료되면 EMR이 종료됩니다 (0) | 2019.10.04 |