欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

hive的分桶表

程序员文章站 2022-05-01 13:03:59
...

hive的分桶表

分区表是针对数据的储存路径
分通表是针对数据文件

步骤
创建一个普通表;
开启分桶设置;
创建一个分通表;
目的
提高索引效率,节省底层资源
实例
创建一个普通表并传入数据

create table stu(
name  string,
course  string,
grade  int
)
row format delimited fields terminated by " ";
load data local inpath "/root/student.txt" into table stu;

开启分桶设置

开启分桶设置
set hive.enforce.bucketing=ture;
设置默认的reduce个数
set mapreduce.job.reduces=-1;

创建一个分桶表

create table bu(
name  string,
course  string,
grade  int
)
clustered by (name)
into 4 buckets
row format delimited fields terminated by " ";

在客户端查看分区数量命令

desc formatted bu; 

导入数据到分桶表

insert into table bu
select * from stu;

在客户端查看数据是没有任何变化的

0: jdbc:hive2://doit01:10000> select * from bu;
+----------+------------+-----------+
| bu.name  | bu.course  | bu.grade  |
+----------+------------+-----------+
| 张三       | 数学         | 75        |
| 张三       | 语文         | 81        |
| 王五       | 英语         | 90        |
| 王五       | 数学         | 100       |
| 王五       | 语文         | 81        |
| 李四       | 数学         | 90        |
| 李四       | 语文         | 76        |
+----------+------------+-----------+

主要变化就是在50070端口的变化
hive的分桶表
数据就被分了4个桶,这样的话,我们再根据这个name的字段进行join的时候就会,节省资源了

抽样调查(不只是针对分桶表呦,普通表也是可以的)

--取其中的8分之3来抽样检查
select * from bu tablesample(bucket 3 out of 8 on name);
0: jdbc:hive2://doit01:10000> select * from bu tablesample(bucket 1 out of 4 on name);
+----------+------------+-----------+
| bu.name  | bu.course  | bu.grade  |
+----------+------------+-----------+
| 张三       | 数学         | 75        |
| 张三       | 语文         | 81        |
+----------+------------+-----------+
相关标签: 大数据 hive