首页 > 解决方案 > 无法理解蜂巢中外部关键字的意义

问题描述

我有几个疑问需要澄清:

  1. 如果我创建一个没有“外部”关键字的表,但指定了“位置”,它将是配置单元中的外部表还是内部表?
  2. 如果我使用带有表名的“external”关键字但未指定“位置”,它将被保存到默认存储的配置单元/仓库位置。在这种情况下,它会是一个外部表吗?

总的来说,我想了解是什么使表格成为外部的,关键字“外部”或指定“位置”。任何帮助将不胜感激。

标签: hadoophiveexternal-tableshiveddl

解决方案


如果我创建一个没有“外部”关键字的表,但指定了“位置”,它将是配置单元中的外部表还是内部表?

它将是 MANAGED 表(EXTERNAL=False)。您可以使用DESCRIBE FORMATTED tablename;

如果我使用带有表名的“external”关键字但未指定“位置”,它将被保存到默认存储的配置单元/仓库位置。在这种情况下,它会是一个外部表吗?

是的,它将是 EXTERNAL 表。

是什么使表格成为外部的,关键字“外部”或指定“位置”

只有 CREATE TABLE 中的 EXTERNAL 属性/关键字才能生成 EXTERNAL TABLE,而不是位置。EXTERNAL 表属性最初与位置无关。EXTERNAL 与否 EXTERNAL(MANAGED) 定义了 DROP TABLE 的行为方式:对于 EXTERNAL 表 DROP TABLE 不会删除表位置,只会删除表元数据。对于托管表 DROP TABLE 将删除它的位置以及所有数据文件和元数据。托管表和外部表支持的功能也存在差异

在早期版本的 Hive 中,托管表或外部表的位置没有限制,并且可以在 hive.metastore.warehouse.dir 之外创建 MANAGED 表。如果未指定 LOCATION,hive 将为托管表和外部表使用 hive.metastore.warehouse.dir 的值。您可以在同一位置创建托管表和外部表:https ://stackoverflow.com/a/54038932/2700344 。

另请参阅https://stackoverflow.com/a/56957960/2700344https://stackoverflow.com/a/67073849/2700344


推荐阅读