hive内部表和外部表
在hive建表语句中有一个EXTERNAL关键字,用来区分创建内部表还是外部表
内部表
内部表也称管理表,默认创建的表都是内部表,因为这种表,Hive 会(或多或少地)控制着数据的生命周期。Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(默认为/user/hive/warehouse)所定义的目录的子目录下。
当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据
外部表
Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这份数据,不过描述表的元数据信息会被删除掉
内部表转为外部表
1
| alter table `user` set tblproperties('EXTERNAL'='TRUE');
|
外部表转为内部表
1
| alter table `user` set tblproperties('EXTERNAL'='FALSE');
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| hive (default)> desc formatted `user`; OK col_name data_type comment # col_name data_type comment id int name string # Detailed Table Information Database: default OwnerType: USER Owner: zhanghe CreateTime: Sun Apr 11 12:52:39 CST 2021 LastAccessTime: UNKNOWN Retention: 0 Location: hdfs://localhost:9000/user/hive/warehouse/user Table Type: MANAGED_TABLE Table Parameters: COLUMN_STATS_ACCURATE {\"BASIC_STATS\":\"true\",\"COLUMN_STATS\":{\"id\":\"true\",\"name\":\"true\"}} bucketing_version 2 numFiles 0 numRows 0 rawDataSize 0 totalSize 0 transient_lastDdlTime 1618116759 # Storage Information SerDe Library: org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe InputFormat: org.apache.hadoop.mapred.TextInputFormat OutputFormat: org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat Compressed: No Num Buckets: -1 Bucket Columns: [] Sort Columns: [] Storage Desc Params: serialization.format 1
|