说明
Hive 中主要包括 4 种数据模型:
- 数据库( Database )
- 表( Table )
- 分区( Partition )
- 桶( Bucket )
其模型如下图:
数据库
相当于关系数据库中的命名空间( 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


