> 文章列表 > Hive 内部表和外部表对比

Hive 内部表和外部表对比

Hive 内部表和外部表对比

前言

在创建表的过程中,会有内部表和外部表之分,那么它们有哪些差别呢,分别的使用场景是什么呢?

内部表

内部表一般存储在 hive.metastore.warehouse.dir 配置项指定的目录下,默认情况下存储在类似于/user/hhive/warehouse/databasename.db/tablename/的目录中。在创建表时,location 配置项可以覆盖默认值。如果删除了内部表或分区,则会删除与该表或分区关联的数据和元数据。如果未指定PURGE选项,数据将在定义的时间间隔内移动到垃圾文件夹。

外部表

外部表描述了外部文件上的元数据/schema。外部表文件可以由Hive之外的进程访问和管理。外部表可以访问存储在Azure存储卷(ASV)或远程HDFS位置等源中的数据。如果更改了外部表的结构或分区,则可以使用 MSCK REPAIR table table_name 语句来刷新元数据信息。

注意:
1.外部表在使用drop语句时,只删除外部表的元数据,而数据文件不会被删除
2.外部表上只允许使用RELY约束

使用场景

内部表:

  • 想要使用ACID等事务特性的时候
  • 使用Hive管理表的生命周期时
  • 生成临时表,用于开发测试

外部表:

  • 文件已经存在或位于远程位置时
  • 避免数据文件不会被因误用Drop而删除(用于生产环境)