티스토리 뷰

 

Hive에서 테이블은 HDFS 상에 저장된 파일과 디렉터리 구조에 대한 메타 정보라고 할 수 있다. 실제 저장된 파일 구조에 대한 정보와 저장 위치, 입력 포멧, 출력 포멧, 파티션 정보, 프로퍼티에 대한 정보 등 다양한 정보를 가지고 있다.

 

테이블 타입

MANAGED

테이블 생성 시 옵션을 따로 설정하지 않으면 MANAGED 테이블로 생성된다. 세션이 종료되어도 테이블의 데이터와 파일은 유지된다. 테이블을 DROP 하면 파일도 함께 삭제된다.

EXTERNAL

EXTERNAL 옵션은 MANAGED 테이블과 파일 삭제 정책을 제외하고 동일하다. EXTERNAL 테이블은 DROP 하면 파일은 그대로 유지되어, 사용자의 실수로 인한 파일 삭제를 방지할 수 있어 EXTERNAL 테이블로 관리하는 것이 좋다.

TEMPORARY

TEMPORARY 옵션은 현재 세션에서만 사용 가능한 테이블을 생성할 수 있다. 현재 세션이 종료되면 제거되기 때문에 임시 테이블 생성에 사용하면 된다.

 

파티션

PARTITIONED BY

파티션은 폴더 구조로 데이터를 분할하여 저장한다. PARTITIONED BY에 지정한 컬럼의 정보를 이용하여 폴더 단위로 데이터가 생성된다. 파티션 생성 시 정보의 제공 유무에 따라 DYNAMIC 파티션과 STATIC 파티션으로 나눈다. Hive는 폴더 단위로 데이터를 읽기 때문에 파티션이 없다면 테이블의 모든 데이터를 읽게 되고, 시간이 갈수록 데이터가 쌓이게 되어 차츰 조회 시간이 길어지게 된다. 이를 방지하기 위해 일자나 특정 조건을 이용하여 파티션을 지정하면 조회 속도를 높일 수 있다.

 

테이블 포멧(ROW FORMAT)

DELIMITED

Hive는 구분자에 따라서 데이터를 분리하여 컬럼 단위로 보여준다.

FIELDS TERMINATED BY                     -- 컬럼을 구분하는 기준
COLLECTION ITEMS TERMINATED BY    -- 리스트를 구분하는 기준
MAP KEYS TERMINATED BY                -- 맵 데이터의 키와 값을 구분하는 기준
LINES TERMINATED BY                      -- ROW를 구분하는 기준
ESCAPED BY                                    -- 값을 입력하지 않음
NULL DEFINED AS                            -- null 값의 표현

 

저장 포멧

STORED AS는 데이터를 저장하는 파일 포멧을 지정한다. 저장 포멧은 TEXTFILE, SEQUENCEFILE, ORC, PARQUET 등이 존재한다.

 

저장 위치

LOCATION

테이블의 저장 위치는 테이블에 쓰는 데이터의 저장위치이다. 사용자가 입력하지 않으면 데이터베이스의 저장위치 아래 테이블 이름의 폴더가 기본 생성된다.

CREATE DATABASE IF NOT EXISTS 데이터베이스; 
DROP TABLE IF EXISTS 데이터베이스.테이블_1H; 
CREATE EXTERNAL TABLE IF NOT EXISTS 데이터베이스.테이블_1H ( 
    컬럼1            STRING    COMMENT '컬럼1설명', 
    컬럼2            STRING    COMMENT '컬럼2설명', 
    컬럼3            STRING    COMMENT '컬럼3설명', 
    컬럼4            STRING    COMMENT '컬럼4설명', 
    ETL_WORK_DTMT    TIMESTAMP COMMENT 'ETL작업일시', 
    컬럼5            DOUBLE    COMMENT '컬럼5설명', 
    컬럼6            DOUBLE    COMMENT '컬럼6설명', 
    컬럼7            DOUBLE    COMMENT '컬럼7설명', 
    컬럼8            DOUBLE    COMMENT '컬럼8설명' 
) COMMENT '테이블 설명_1H' 
PARTITIONED BY (DT STRING COMMENT '파티션 일자 (yyyymmdd)', HH STRING COMMENT '파티션 시간 (hh24)') 
ROW FORMAT DELIMITED 
FIELDS TERMINATED BY '\t' 
LINES TERMINATED BY '\n' 
NULL DEFINED AS '' 
STORED AS TEXTFILE 
LOCATION 'hdfs://hadoop-cluster/hadoop/warehouse...'
;

위 예시는 1시간단위로 데이터를 수집하는 테이블이다. 파티션을 상황에 맞게 지정해 주면된다.

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함