Skip to content

Latest commit

 

History

History
47 lines (36 loc) · 1.39 KB

Hive-table-partition-vs-bucket.md

File metadata and controls

47 lines (36 loc) · 1.39 KB

Hive table partition vs bucket

partition 과 bucket 모두 hive 테이블을 물리적으로 분할하는 개념이다.

차이점은 간단하게 말하면 partition 은 디렉터리 분할, bucket 은 파일 분할이다.

partition은 PARTITIONED BY ()로 주어진 값을 이름으로 하는 디렉터리를 hdfs 생성해서 분할한다.

bucket 은 partition 에 의해 생성된 디렉터리 내에서 INTO # BUCKETS 로 지정된 갯수만큼 파일을 생성하고 CLUSTERED BY ()로 주어진 값의 해시값을 기준으로 데이터를 해당 bucket(분할된 여러 파일)에 저장한다.

예를 들어 대략 다음과 같은 DDL 이 있으면

CREATE TABLE IF NOT EXISTS MY_HIVE_TABLE (
  id string
  , col001 string
  , col002 string)
 PARTITIONED BY ( part_hour string, user_type string )
 CLUSTERED BY ( id )
 SORTED BY ( id ASC )
 INTO 256 BUCKETS
 ROW FORMAT DELIMITED
   FIELDS TERMINATED BY ','
   LINES TERMINATED BY '\n'
 STORED AS INPUTFORMAT
   'org.apache.hadoop.mapred.TextInputFormat'
 OUTPUTFORMAT
   'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'

hdfs 에서는 다음과 같이 생성된다.

/user/hive/warehouse/my_hive_table/part_hour=2020042811/user_type=nba
  ㄴ 000000_0
  ㄴ 000001_0
  ㄴ ...
  ㄴ 000255_0
/user/hive/warehouse/my_hive_table/part_hour=2020042811/user_type=mlb
  ㄴ 000000_0
  ㄴ 000001_0
  ㄴ ...
  ㄴ 000255_0