前言
#博学谷IT学习技术支持#
在Hive Select查询中一般会扫描整个表内容,会消耗很多时间做没必要的工作,有时候只需要扫描表中某些数据,因此Hive建表时引入了partition分区的概念;Hive中的分区就是分目录,而分桶的实质是分文件。
一、分区表
- 分区表的概念
分区表实际上就是对应一个HDFS文件系统上的独立的文件夹,该文件夹下是该分区的所有的数据文件。分区表就是将数据按照表中的某一个字段进行统一归类,并存储在表中的不同的位置,也就是说,一个分区就是一类。把一个大的数据集根据业务需要分割成更小的数据集。 在hive中查询时通过WHERE子句中的表达式来选择查询所需要的指定的分区,这样的查询效率会提高很多。 - 分区表的意义
(1)分区表的作用是查询时,我们可以手动指定对应分区的数据,避免全表扫描,提高查询效率。
二、分桶表
Hive表分区的实质是分目录且分区的字段不属于Hive表中存在的字段;而分桶的实质是分文件,且分桶的字段必须在Hive表中存在。
- 分桶的概念
单个分区中的数据量越来越大,当分区不能更细粒的划分数据时,所以会采用分桶技术将数据更细粒度的划分和管理
分区提供了一个隔离数据和优化查询的便利的方式.但是当分区的数量过多时,会产生过多的小分区,这样会给namenode带来较大的压力.分桶是将数据集分解成更容易管理的若干部分的另一个技术 - 分桶的意义
(1)可以提高多表join的效率,提高查询效率,假如原数据被分了4个桶,此时2表join的时候只需要读取符合条件的一个分桶,则理论上效率可提升4倍;
(2)加速数据抽样的效率,理论上只需要按照指定规则抽取指定分桶的数据即可,不需要扫描全表。
三、分区表和分桶表的差别
(1)从表现形式上,分区表是主机上的一个目录,而分桶表的是文件
(2)从建表语句上:分区表使用partitioned by 子句指定,以指定字段为伪列,需要指定字段类型,分桶表由clustered by 子句指定,指定字段为真实字段,需要指定桶的个数
(3)从数量上:分区表的分区个数可以增长,分桶表一旦指定,就无法再增长
(4)从作用上:
分区避免全表扫描,根据分区列查询指定目录提高查询速度
分桶保存分桶查询结果的分桶结构
分桶表数据进行抽样和JOIN时可以提高MR程序效率
本文介绍了Hive中的分区表和分桶表,包括它们的概念、意义及区别。分区表通过按特定字段归类数据,形成独立的文件夹,减少全表扫描,提高查询效率。分桶表则是在分区的基础上,依据字段将数据分组到不同文件中,有助于提高JOIN操作和数据抽样效率。两者在表现形式、建表语句、数量和作用上均有不同。
278

被折叠的 条评论
为什么被折叠?



