Hive内部表、外部表
1. 内部表(Managed Table):
- 内部表是由Hive完全管理的表,包括数据和元数据。
- 当你删除内部表时,Hive会同时删除表的数据和元数据。
- 内部表的数据存储在Hive指定的默认位置(通常是HDFS上的
/user/hive/warehouse
目录),不需要用户自己指定数据存储位置。 - 创建内部表时,可以直接使用
CREATE TABLE
语句,并且不需要指定EXTERNAL
关键字。
2. 外部表(External Table):
- 外部表也是由Hive管理的表,但是数据由用户自己管理。
- 当删除外部表时,只会删除表的元数据,不会删除数据本身。
- 外部表的数据存储在用户指定的位置,可以是HDFS上的任何位置,也可以是本地文件系统或其他存储系统。
- 创建外部表时,需要使用
CREATE EXTERNAL TABLE
语句,并且在表定义中使用LOCATION
关键字来指定数据存储位置。
3.如何选择?
-
当需要通过Hive完全管理控制表的整个生命周期时,请使用内部表
-
当数据来之不易,防止误删,请使用外部表,因为即使删除表,文件也会被保留
-
内部表适合管理Hive自己生成的数据,而外部表适合管理外部数据源,如已存在的数据文件或其他数据库中的数据。