Hive数据模型相关的主要概念介绍

Hive中所有的数据都存储在HDFS中,并没有专门的存储格式,也没有为数据建立索引,他可以非常自由地组织表结构。使用者只需要在创建表的时候指定字段列为分隔符和记录行分隔符,Hive就可以进行解析。尽管如此,Hive的数据模型仍然包括几个主要概念:数据库(Database)、表(Table)、分区(Partition)和桶(Bucket)。如下图所示:

15755641-585d92a3eebe72d2.png
Hive数据模型

数据库:它的作用是将用户的应用隔离到不同的数据模式中,Hive 0.6.0之后的版本都支持数据库,相当于关系型数据库里的命名空间(Namespace)。

表:Hive的表和数据库中的表在概念上非常接近,在逻辑上,其由描述表格形式的元数据和存储于其中的具体数据共同组成,可以分为托管表和外部表。托管表在Hive中有一个对应的目录,所有的数据都存储在这个目录中。而外部表的数据文件可以存放在Hive仓库以外的分布式文件系统上。表删除的DROP命令对于这两种类型产生的效果也不同,对托管表执行DROP命令的时候,会同时删除元数据和其中存储的数据,而对外部表执行该命令的时候,则只能删除元数据,而不会删除外部分布式系统上所存储的数据。

分区:Hive中的分区方式和数据库中的差异很大,他的概念是根据分区列对表中的数据进行大致地划分。这里,分区列不是表里的某个字段,而是一个独立的列。前面提到过Hive表就是通过分布式文件系统的目录来实现的,那么相应地,表的分区在Hive存储上就体现为主目录下的多个子目录,而子目录的名称就是分区列的名称。使用分区的好处在于,查询某个具体分区列里的数据时不用进行全表扫描,可以大大加快范围内的查询。

桶:表和分区都是在目录级别上进行数据的拆分,而桶则是对数据源数据文件本身进行数据拆分。使用桶的表会将源数据文件按一定的规律拆分成多个文件。

转载于:https://www.jianshu.com/p/7664cd6bf6a0

猜你喜欢

转载自blog.csdn.net/weixin_34014277/article/details/91282761