Hive中external关键字作用及内外表判定规则咨询
Hive 内部表/外部表判定规则解答
核心结论
判定Hive表为外部表的唯一核心依据是建表时是否使用了EXTERNAL关键字,和是否指定LOCATION参数没有任何关联。
常见问题解答
问题1:建表时未使用EXTERNAL关键字,但指定了LOCATION参数,此时创建的是内部表还是外部表?
- 属于内部表(托管表)
- 说明:该场景仅修改了内部表的默认存储路径,没有改变表的托管属性。执行
DROP TABLE操作时,Hive会同时删除该表的元数据,以及LOCATION指定路径下的所有数据文件。
示例建表语句:
CREATE TABLE test_user ( uid INT, username STRING ) LOCATION '/custom/path/test_user';上述语句未加
EXTERNAL关键字,即使指定了自定义存储路径,依旧为内部表。
问题2:建表时使用了EXTERNAL关键字,但未指定LOCATION参数,此时创建的表是否属于外部表?
- 属于外部表
- 说明:该场景下外部表的数据会存储到Hive默认的仓库路径
/user/hive/warehouse/[库名].db/[表名]下,但表的非托管属性不变。执行DROP TABLE操作时,Hive只会删除该表的元数据,不会删除默认路径下存储的实际数据文件。
示例建表语句:
CREATE EXTERNAL TABLE test_order ( order_id BIGINT, amount DECIMAL(10,2) );上述语句加了
EXTERNAL关键字,即使没有指定自定义存储路径,依旧为外部表。
补充说明
已创建的表可以通过修改表属性切换内外表属性,操作同样和LOCATION无关:
- 切换为外部表:
ALTER TABLE 表名 SET TBLPROPERTIES('EXTERNAL'='TRUE'); - 切换为内部表:
ALTER TABLE 表名 SET TBLPROPERTIES('EXTERNAL'='FALSE');
内容的提问来源于stack exchange,提问作者N_A
相关产品推荐
相关产品推荐

