Hive 的数据存储是基于HDFS 的,它没有专门的存储格式,在默认情况下,Hive 使用制表符来分割列与列之间的间隔,用户也可以在创建表时自由指定数据中的列分隔符和行分隔符。
Hive 的数据模型主要有:数据库(Database)、表(Table)、分区(Partition)和桶(Bucket)。
(1)数据库(Database)
Hive 中的数据库相当于关系型数据库中的命名空间,作用是将数据库应用隔离到不同的数据库模式中,在HDFS 中表现为“${hive.metastore.warehouse.dir}”目录下的一个文件夹。
(2)表(Table)
Hive 中的表本质上是Hadoop 文件系统中的目录或文件,在默认情况下,表的存放路径位于数据库目录下,按表名进行文件夹区分。表可以过滤、投影、连接和联合。
Hive 常见的数据表的类型有内部表、外部表、分区表和桶表。
1)内部表
内部表(Manager Table)也称为“管理表”,其数据由Hive 自身管理,是Hive 默认的表类型。内部表的数据会存放在HDFS 的特定位置中,一般在Hive 的数据库目录下。当删除内部表时,Hive 将删除表中的数据和元数据。
2)外部表(www.xing528.com)
外部表(External Table)使用external 修饰,其数据由HDFS 管理,数据的存放位置可以由用户任意指定。外部表的数据除了Hive 外,其他的工具(如Pig)也可以使用。创建外部表时,Hive 仅记录数据所在的路径,不对数据的位置作任何改变。删除外部表时,Hive 只删除表的元数据,表中的数据并未删除。因此,相对来说,外部表较内部表安全,数据组织更加灵活,方便数据共享。
3)分区表
分区表(Partition Table)的存放路径在HDFS 中表现为表目录下的子目录,该子目录以分区值命名。分区表就是将表进行水平切分,将表数据按照某种规则存储,以提高查询效率。
4)桶表
桶表(Bucket Table)是同一个表目录下根据Hash 散列之后的多个文件。在处理大规模数据集时,如果分区不能更细粒度地划分数据,可以采用分桶技术来更细粒度地划分和管理数据,一般用于高效率的数据采样。
(3)分区(Partition)
在大数据应用中进行全表扫描非常耗费资源,Hive 可以为频繁使用的数据建立分区,分区是表的部分列的集合。这样查找分区中的数据时就不需要扫描全表,就能极大地提高查找效率。例如,一个表里存储了一年的数据,但很多时候只想查询其中一天的数据,而为了这一天的数据去扫描全表是相当不划算的操作。因此,建表时可以指定按天分区,这样在后续应用中可以按分区查找,以提高效率。在实际生产环境中,由于业务数据量较大,一般都会对表进行分区。
(4)桶(Bucket)
桶(Bucket)是通过对指定列进行Hash 计算来实现的,通过哈希值来进行数据切分,每个桶对应于该列下的一个存储文件。分区和分桶最大的区别:分桶是随机分割数据,而分区并非随机分割;分桶存储在文件中,而分区存放在文件夹中。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。