hive教程:数据模型:数据库( Database )、表( Table )、分区( Partition )、桶( Bucket ) 作者:马育民 • 2024-07-29 23:07 • 阅读:10016 # 说明 Hive 中主要包括 4 种数据模型: - 数据库( Database ) - 表( Table ) - 分区( Partition ) - 桶( Bucket ) 其模型如下图: [![](/upload/0/0/1IX895eMjbPm.png)](/upload/0/0/1IX895eMjbPm.png) [![](/upload/0/0/1IX895jadJ6y.png)](/upload/0/0/1IX895jadJ6y.png) [![](/upload/0/0/1IX8963D12H8.png)](/upload/0/0/1IX8963D12H8.png) ### 数据库 相当于关系数据库中的命名空间( namespace ),它的作用是将用户和数据库的应用,隔离到不同的数据库或者模式中。 **在HDFS上的体现:**Hive 数据库是 HDFS 中的一个目录 ### 表 Hive 的表在逻辑上由存储的数据和描述表格数据形式的相关元数据组成。 Hive 中的表分为两种类型: - 内部表 - 外部表 **在HDFS上的体现:**Hive 中的表是 HDFS 中的一个目录 ### 分区 为了 **提高查询数据的效率**,Hive 提供了分区机制。 **在HDFS上的体现:**分区也是一个目录,在表对应的目录下,这个子目录的名字就是定义的分区列的名字。 例如:现在有个日志文件,文件中的每条记录都带有时间戳。 如果根据时间来分区,那么同一天的数据将会被分到同一个分区中。 这样的话,如果査询每一天或某几天的数据就会变得很高效,因为只需要扫描对应分区中的文件即可。 ### 桶 Hive 可以对每一个表或者是分区,进一步组织成 **桶**,也就是说桶是更为细粒度的数据范围划分,桶表是 Hive 数据模型的最小单元 可以获得 **更高的查询效率**,尤其是抽样查询更加便捷。 Hive 是针对表的某一列进行分桶,即:对该列的值进行哈希取值,然后除以桶个数得到余数,决定该条记录存放在哪个桶中,保证 **每个桶中都有数据** **在HDFS上的体现:**每个桶表就是表或分区的一个文件。 参考: https://blog.csdn.net/Shockang/article/details/118068783 https://hadoopdoc.com/hive/hive-data-model 原文出处:http://malaoshi.top/show_1IX8964IQHyB.html