首页/数据/数据工程与 ETL 速查/Hive 外部表与托管表区别
管道基础52 条

Hive 外部表与托管表区别

外部表(EXTERNAL)只管理元数据,DROP 不删数据文件;托管表 DROP 默认会连同数据一起删除。共享目录与原始数据一律用外部表。

外部表DROP TABLE 删元数据,数据保留
托管表DROP TABLE 默认连数据目录一起删除
选择共享/原始数据用外部表,中间结果可用托管表

外部表定义与删除语义

外部表定义与删除语义
CREATE EXTERNAL TABLE ods_order (
  order_id STRING,
  amount DECIMAL(10,2)
) PARTITIONED BY (dt STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3a://lake/landing/orders';

DROP TABLE ods_order;   -- 只删元数据,数据文件仍在
把外部表 LOCATION 指到别人结果目录,一次 INSERT OVERWRITE 就会改写对方数据。

易错点

  • 外部表数据目录权限不足时查询报权限错,读之前先对齐文件 ACL/桶策略
  • 误用托管表承载原始数据,DROP 时数据被删且难以恢复

数据来源与参考

  • Apache Hive 官方文档:Managed vs External Tables
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌