1.何为分桶以及和分区的区别
2.实际例子
分桶:如果我们根据某列进行分桶,意思就是对这列的值进行hash,然后除以桶的个数再决定把这个值放到哪个桶中,当我们查询数据的时候,where 分桶列=“” 首先也会对这个条件的值进行hash,找到他所在的桶,这样的话 其他桶就不会再找避免暴力扫描,速度上也会提升
和分区区别:分区是增加实际目录,每增加一个分区就会多个目录,分桶时把一个大的文件分成多个小文件
实际例子:
1.分桶格式:
drop table if exists table_name;
create table if not exists table_name(
row_name row_type,
row_name1 row_type,
...........................................
)
clustered by (row_name) stored by(row_name1) into 4 buckets
row format delimited fields terminated by '\t' stored as textfilel
set hive.enforce.bucketing=true;注意如果没有这句,分桶不会生效
实际例子:
创建分区表:
hive> create table if not exists buckets4(id string,name string) clustered by(id) sorted by(name) into 3 buckets row format delimited fields terminated by '\t' stored as textfile;
开启分桶:
hive> set hive.enforce.bucketing=true;
插入数据:
hive> insert overwrite table buckets4 select * from buckets3;
查看目录变化:
hive> dfs -ls /user/hive/warehouse/buckets4;
Found 3 items
-rwxr-xr-x 2 root supergroup 69 2015-11-21 01:55 /user/hive/warehouse/buckets4/000000_0
-rwxr-xr-x 2 root supergroup 72 2015-11-21 01:56 /user/hive/warehouse/buckets4/000001_0
-rwxr-xr-x 2 root supergroup 49 2015-11-21 01:58 /user/hive/warehouse/buckets4/000002_0
查看内容看你的数据是否被分散在这个三个桶中:
hive> dfs -text /user/hive/warehouse/buckets4/000000_0;
hive> dfs -text /user/hive/warehouse/buckets4/000001_0;
hive> dfs -text /user/hive/warehouse/buckets4/000002_0;