0%

hive内部表和外部表

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