前言
在创建表的过程中,会有内部表和外部表之分,那么它们有哪些差别呢,分别的使用场景是什么呢?
内部表
内部表一般存储在 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而删除(用于生产环境)