Hadoop-Hive 内部表/外部表 分区表/分桶表区别

1)hive中内部表和外部表的区别

内部表:又叫管理表,表的创建,和删除都由hive自己决定。
外部表:表结构上同内部表,但是存储的数据时自己定义的,外部表在删除的时候只删除元数据,原始数据时不能删除的。

内部表和外部表的区别主要体现在两个方面

  • 删除:删除内部表,删除元数据和数据;删除外部表,删除元数据,保留数据。
  • 使用:如果数据的所有处理都在 Hive 中进行,那么倾向于 选择内部表,但是如果 Hive 和其他工具要针对相同的数据集进行处理,外部表更合适。使用外部表访问存储在hdfs上的数据,然后通过hive转化数据并存储到内部表中。

2)hive中分桶表和分区表的区别

分区表: 原来的一个大表存储的时候分成不同的数据目录进行存储。
  如果说是单分区表,那么在表的目录下就只有一级子目录,如果说是多分区表,那么在表的目录下有多少分区就有多少级子目录。不管是单分区表,还是多分区表,在表的目录下,和非最终分区目录下是不能之间存储数据文件的。

例:
	单分区表:
		Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p0
	多分区表:
		Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p0
		Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p1
		Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p2
		Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/p1/p11

分桶表: 原理和hashpartitioner 一样,将hive中的一张表的数据进行归纳分类的时候,归纳分类规则就是hashpartitioner。(需要指定分桶字段,指定分成多少桶)

bucket:在hdfs中表现为同一个表目录或者分区目录下根据某个字段的值进行Hash散列之后的多个文件,分桶的表现形式就是一个单独的文件.

例:
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/age>15
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/age>20
Hdfs://Hadoop01/user/hive/warehouse/myhive.db/student/age>30

分区表和分桶的区别除了存储的格式不同外,最主要的是作用:

  • 分区表:细化数据管理,缩小mapreduce程序 需要扫描的数据量
  • 分桶表:提高join查询的效率,在一份数据会被经常用来做连接查询的时候建立分桶,分桶字段就是连接字段;提高采样的效率

你可能感兴趣的:(大数据学习)