Hive之数据组织形式 

第一节:数据库

      Hive的数据库同mysql中的数据库,将数据进行细化管理,不同业务模块的数据放在一个数据库中。

第二节:数据表

一、按管理权限分

1、内部表

      管理权限是hive自己,hive对表中的数据(原始数据)有绝对的增删权限的。内部表在进行删除表的时候,表中的数据(hdfs对应的目录)会被删除的,元数据会被删除。

2、外部表

      外部表更像一个hdfs的数据使用者,使用的数据管理权限hdfs自己管理,hive来说只有使用权限的。外部表在进行删除表的时候,元数据会被删除(因为表已经不存在了),表中的数据,hdfs对应的数据不会被删除的。

3、总结

      内部表和外部表最本质的一个区别,删除表的时候,外部表的数据不会被删除,内部表的数据会被删除。内部表或外部表删除表的时候元数据都会被删除。

二、按功能分

1、分区表

      分区表的作用: 减少了扫描范围,提升了查询性能。

      分区标准:在进行分区的时候利用分区字段进行分区。分区字段一般是过滤的条件字段,经常用于过滤的字段。

      分区表的存储

      (1)普通表数据的存储

      hdfs: /user/hive/warehouse/数据库/表/数据文件(默认路径,配置文件中可以进行修改)

      (2)分区表存在不同目录

      hdfs: /user/hive/warehouse/数据库/表/age=18/

      /user/hive/warehouse/数据库/表/age=19/

      /user/hive/warehouse/数据库/表/age=20/

2、分桶表

      分桶表的概念:将两个要进行关联查询的表都进行切分,按照统一的规则切分的。每一切分的小文件,称为一个桶。两个表为分桶表,分桶依据的依据为分桶算法,关联建.hash % 分桶个数。最终相同的关联建在两个表中的对应的桶一样的。

      分桶表的作用:(1)为了提升关联查询的性能。关联的时候两个表进行分桶个数有限制:相同或是倍数关系。(2)提升抽样查询的性能。一个桶的数据就可以认为一个抽样的样本数据。

3、总结

      不管是分区表还是分桶表,在存储的时候都是物理上的存储,已经分好各个目录或文件,若需要同时提高查询性能和多表连接性能则可以在分区表下在建立分桶表。

      分区是划分成目录,分桶是划分成文件,都是物理上的划分。

第三节:视图

      1、一个视图代表的就是一个查询语句

      2、hive中的视图只存在逻辑视图,没有物化视图,仅仅将视图代表的sql语句保存下来了。物化视图: 将视图代表的sql查询语句进行执行返回的结果。

      3、视图在查询视图的时候开始真正实行视图代表的语句的。select * from view_name;

      4、视图作用仅仅为了提升sql语句的可读性

  5、hive中的视图不支持insert、delete、update