文章目录

  • Hive中内部表、外部表、分区表、分桶表之间的关系
  • 1.0🚀内部表
  • 2.0👀外部表
  • 3.0🫥内部表和外部表的差异
  • 3.0🐘分区表
  • 4.0😃分桶表


Hive中内部表、外部表、分区表、分桶表之间的关系

1.0🚀内部表

 内部表(Internal table)也称为被Hive拥有和管理的托管表(Managed table)。默认情况下创建的表就是内部表,Hive拥有该表的结构和文件。换句话说,Hive完全管理表(元数据和数据)的生命周期,类似于RDBMS中的表。

  当删除内部表时,它会删除数据以及表的元数据。

2.0👀外部表

  外部表(External table) 中的数据不是Hive拥有或管理的,只管理表元数据的生命周期。要创建一个外部表,需要使用EXTERNAL语法关键字。

  删除外部表只会删除元数据,而不会删除实际数据。 在Hive外部仍然可以访问实际数据。

  而且外部表更为方便的是可以搭配location语法指定数据的路径。

3.0🫥内部表和外部表的差异

hive TTL生命周期 hive表的生命周期_外部表

 当需要通过Hive完全管理控制表的整个生命周期时,请使用内部表。

  当文件已经存在或位于远程位置时,请使用外部表,因为即使删除表,文件也会被保留。

3.0🐘分区表

 当Hive表对应的数据量大、文件多时,为了避免查询时全表扫描数据,Hive支持根据用户指定的字段进行分区,分区的字段可以是日期、地域、种类等具有标识意义的字段。比如把一整年的数据根据月份划分12个月(12个分区),后续就可以查询指定月份分区的数据,尽可能避免了全表扫描查询。

hive TTL生命周期 hive表的生命周期_大数据_02

4.0😃分桶表

🚗分桶表也叫做桶表,叫法源自建表语法中bucket单词,是一种用于优化查询而设计的表类型。

🚓分桶表对应的数据文件在底层会被分解为若干个部分,通俗来说就是被拆分成若干个独立的小文件。

🛺在分桶时,要指定根据哪个字段将数据分为几桶(几个部分)。

hive TTL生命周期 hive表的生命周期_大数据_03

🎆和非分桶表相比,分桶表的使用好处有以下几点:

1、 基于分桶字段查询时,减少全表扫描

2、 JOIN时可以提高MR程序效率,减少笛卡尔积数量

  对于JOIN操作两个表有一个相同的列,如果对这两个表都进行了分桶操作。那么将保存相同列值的桶进行JOIN操作就可以,可以大大较少JOIN的数据量。

3、 分桶表数据进行抽样

  当数据量特别大时,对全体数据进行处理存在困难时,抽样就显得尤其重要了。抽样可以从被抽取的数据中估计和推断出整体的特性,是科学实验、质量检验、社会调查普遍采用的一种经济有效的工作和研究方法。