Hive--桶表

目录

      • 1. 为什么要使用桶表???
      • 2. 桶表分桶规则
      • 3. 桶表的创建
        • 3.1 DLL
        • 3.2 数据
        • 3.3 DML
        • 3.4 查看桶表里面的数据
        • 3.5 临时表创建并加载数据
        • 3.6 把临时表的数据加载到桶表里面
      • 4. 桶表的查询
        • 4.1 桶表查询全表的数据
        • 4.2 桶表查看第一个桶里面的数据
        • 4.3 查看第二个桶里面的数据
        • 4.4 查看第三个桶里面的数据
        • 4.5 查看桶表固定行数据
        • 4.6 桶表查询语法
        • 4.7 其他查询
      • 5 桶表、分区表的区别
      • 6 两个桶表之间的Join
        • 6.1 year 桶表创建并加载数据
        • 6.2 两个桶表Join

1. 为什么要使用桶表???

  • 单个分区或者表中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理。
  • 分区提供了一个隔离数据和优化查询的便利的方式.但是当分区的数量过多时,会产生过多的小分区,这样会给namenode带来较大的压力.分桶是将数据集分解成更容易管理的若干部分的另一个技术。

2. 桶表分桶规则

  • 个人理解桶表的分桶类似于MapReduce的默认分区规则–HashPartitioner差不多,桶表的分区则是通过分桶的字段进行Hash然后除以桶的个数,然后取余数,余数决定数据是在哪个桶内。
  • 桶表本质上面并不会改变目录结构,桶表输出的文件个数等于桶的数量。

3. 桶表的创建

3.1 DLL
create table score_bucket (
`year` int, 
`course` string, 
`student` string, 
`score` int
)
comment 'score 分桶表'
clustered by (year) sorted by (score desc) into 3 buckets
ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';
3.2 数据
2018,语文,A,67
2018,英语,A,56
2018,数学,A,69
2018,语文,B,67
2018,英语,B,72
2018,数学,B,56
2019,语文,A,72
2019,英语,A,51
2019,数学,A,83
2019,语文,B,53
2019,英语,B,70
2019,数学,B,52
2020,语文,A,75
2020,英语,A,60
2020,数学,A,90
2020,语文,B,60
2020,英语,B,80
2020,数学,B,70
3.3 DML
hive> set hive.strict.checks.bucketing=false;
hive> load data local inpath '/home/work/data/hive/score.txt' overwrite into table score_bucket

你可能感兴趣的:(Hive,hive)