如何在配置单元中使用外部表?

vnjpjtjt  于 2021-05-31  发布在  Hadoop
关注(0)|答案(3)|浏览(329)

有人能解释一下为什么在hive中使用外部表吗?
请解释一个容易理解的场景。

mepcadol

mepcadol1#

配置单元中外部表和托管表之间的唯一区别是 Drop table 或者 Drop partition 行为。对于托管,它也将删除数据,对于外部表,数据将在表/分区位置保持不变。
在大多数情况下使用外部。外部表允许您轻松更改表定义。也可以在同一位置上创建几个表。如果表是临时/中间表,则应使用托管表,并且应删除数据以释放空间。
可以使用将托管表转换为外部表,反之亦然

alter table table_name SET TBLPROPERTIES('EXTERNAL'='TRUE');
igetnqfo

igetnqfo2#

经验法则是:如果您计划使用那些不仅来自hive而且来自其他框架的数据,请使用外部表。否则将其内部化。

thtygnil

thtygnil3#

当由配置单元表指向的基础数据集被多个目的共享时,即用于map reduce job、pig等,我们使用外部表;当由配置单元表指向的数据集仅由配置单元应用程序使用时,我们在配置单元中使用托管表。
实际上,在配置单元中,托管表对数据集具有完全控制权,即在托管表中,如果您要删除表,则数据集也将从hdfs中存在的配置单元仓库(/usr/hive/warehouse)中删除,但如果是外部表,则当您删除表时,数据集不会从hdfs中的配置单元仓库中删除。
假设您现在有一个50 gb的数据集,如果您为不同的目的创建数据集的多个副本,它只会占用更多的空间,因此更好的选择是使用外部表,这样当您删除表时,数据集不会被删除,并且您可以由任何其他应用程序(如pig)或任何其他目的进一步使用它。

相关问题