Hive中的Managed-Table以及External-Table(译)

Posted by AlstonWilliams on February 17, 2019

译者注: 这篇文章中主要介绍了Hive中的Managed Table和External Table在存储文件上的区别.更多的区别,请自行搜索.

在这篇文章中,我们主要介绍题目中所说的那两种Table的区别,以及怎样创建这两种类型的表和什么时候我们会用到它们.

Hive有两种类型的表:

  • Managed Table
  • External Table

下面我们详细介绍这两种表.

Managed Table

这种表也被称作Internal Table.这是Hive中的默认的类型.如果你在创建表的时候没有指明Managed或者External,那么默认就会给你创建Managed Table.

Managed Table的数据,会存放在HDFS中的特定的位置中,通常是/user/hduser/hive/warehouse.当然,也不一定,看你的Hive的配置文件中是如何配置的.

我们可以使用下面的命令来创建一个Managed Table:

我们已经成功创建一个Managed Table了,我们使用下面的命令来查看:

在上图中,我们可以看到,Table Type那里是Managed Table,这就表示我们确实创建了一个Managed类型的Table.

我们使用下面的命令,从本地文件系统中加载一些数据到这张表中:

通过下面的命令,查看这张表在HDFS中的位置:

我们可以从上图看到该表在HDFS中的位置.

下面我们删除这张表:

我们成功地删除了这张表.

我们再查看一下这种表在HDFS中是否存在:

在上图中,我们可以看到,表和它的内容,都从HDFS中删除了.

External Table

External Table特别适用于想要在Hive之外使用表的数据的情况.当你删除External Table时,只是删除了表的元数据,它的数据并没有被删除.

我们创建一张External Table,并查看一下它的结构:

从上图中,我们可以看到,表的类型是”External Table”.

现在我们同样从文件系统中加载一些数据到这张表中:

然后,我们可以通过下面的命令查看它的位置:

删除它:

再检查一下:

你可以看到,即使我们删除了表,它的数据仍然存在.

什么时候使用哪种表?

Managed Table

  • 数据是临时数据
  • 外部的程序无法访问这些数据
  • 数据会随着表的删除而删除

External Table

  • 数据可以被外部程序访问
  • 你不能基于已经存在的表再创建表
  • 表被删除时,数据不会被删除