Hive-分区、分桶

Hive-分区、分桶

分桶(bucket)

对某一列取哈希值,对桶的个数求模取余,根据余数决定该条记录进入哪一个桶

场景:小表关联大表时效果明显(Map Side Join),会把小表数据通过DistributedCache分发到各个Map Side,然后加载到内存和每一个Map任务处理的大表进行JOIN,这样就不必要去做Reduce JOINJOIN时是按照桶来JOIN的,大大减少了JOIN的数量

不能修改bucket列的值,否则会报以下错误:FAILED:SemanticException [Error 10302]:Updating values of bucketing columns is notsupported. Column id.

示例

create table t1(id int , name string) clustered by (id) into 8 buckets stored as orc tblproperties ('transactional'='true');

关键字clustered声明划分桶的列和桶的个数,这里以id来划分桶,划分8个桶。Hive会计算id列的hash值再以桶的个数取模来计算某条记录属于哪个桶。

分区(partition)

分区就是对某列有相同的数据或者某一个数据范围的数据进行分类,在查询时就可以针对分区查询,不必进行全表扫描

对分区表执行insert时,表名后要跟partition子句。

原文地址:https://www.cnblogs.com/EnzoDin/p/14198472.html