hive的四种表

本文详细介绍了Hive中内部表、外部表、分区表和分桶表的区别,包括创建、删除操作及数据存储路径。重点讲解了分区表用于高效查询和日期分区的应用,以及分桶表通过哈希和排序提升join性能的原理。同时讨论了数据倾斜问题和数据仓库的基本路径结构。
摘要由CSDN通过智能技术生成
  • 内部表:创建表的时候默认把该表的数据,使用默认的组织方式,来存储在默认的仓库路径

create table student()
  • 外部表:创建表的时候,数据已经在hdfs了,不是默认目录,需要在创建表的时候指定目录。适合多个team共同访问的数据

create external table student( ) row ...loaction "/aa/bb/cc"

删除表的时候

内部表:删除元数据也删除数据文件

外部表:删除元数据,不删除数据文件

 

  • 分区表:表中数据一定属于某个分区

create table student_par(id int,name string )partitioned by (age int)
分区字段一定不能和表字段一样,但是在使用的时候,分区字段和表字段没有不同

以前数据直接放在表目录中,现在表目录中再创建文件夹,每个文件夹保存一部分数据,也就意味着:一张表的数据可以被分门别类的进行管理

hdfs:/user/hive/warehouse/db.db/student/city=shanghai/student/.txt

生产环境中绝大部分的表都是分区表,分区字段大部分都是date类型,按天分区概率最大

select * from student_par where date > 2020-08-21

  • 分桶表:按照文件的形式来组织区分和默认的mapreduce的hashpartioner一模一样

create table student_bck(id int,name string) cluster by (name) sorted by (age desc) into 3 buckets;

这张表中的数据,按照name字段划分成了三个文件进行管理,每个文件中的数据都会按照age进行降序排列
hash散列,分成三个桶

分区表用来提高查询效率,如果大量的sql语句都是按照某个字段进行过滤,那么可以按照这个字段作为分区字段建表

如果数据基本上只会分析增量数据,不会分析全量数据。那么就应该按照时间进行分区

分桶表也是用来提高查询效率,用来进行抽样

如果某张表的某个字段经常被用作一个join查询条件,就应该要建分桶表进行优化

select a.*,b.* from a join b on a.id=b.id a表和b表都要分桶,而且字段要一致,只要两个表的分桶个数是倍数关系就可以

 

为什么分桶join会比较快?上图

分区分桶都会产生数据倾斜

数据仓库的默认路径:/user/hive/warehouse

库路径:db1.db

表路径:student

数据文件:student.txt

当前表的完成的存储路径:/user/hive/warehouse/db1.db/student/student.txt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值