内部表(管理表)
  • 默认创建的表都是所谓的管理表,有时也被称为内部表。因为这种表,Hive 会(或多或 少地)控制着数据的生命周期。 Hive 默认情况下会将这些表的数据存储在由配置项hive.metastore.warehouse.dir(例如,/user/hive/warehouse)所定义的目录的子目录下。 当我们删除一个管理表时,Hive 也会删除这个表中数据。管理表不适合和其他工具共享数据。

  • 实例操作
    原始数据

【Hive】内外部表的创建和区别_hive

普通创建表

create table if not exists student( id int, name string
)
row format delimited fields terminated by '\t' stored as textfile
location '/user/hive/warehouse/student';

根据查询结果创建表(查询的结果会添加到新创建的表中)

create table if not exists student2 as select id, name from student; 

根据已经存在的表结构创建表

create table if not exists student3 like student; 

查询表的类型

hive (default)> desc formatted student2;
 Table Type:	MANAGED_TABLE
外部表
  • 因为表是外部表,所以 Hive 并非认为其完全拥有这份数据。删除该表并不会删除掉这 份数据,不过描述表的元数据信息会被删除掉。

  • 案例实操
    数据
    【Hive】内外部表的创建和区别_hive_02
    建表语句,创建外部表 创建

create external table if not exists dept( deptno int,
dname string, loc int
)
row format delimited fields terminated by '\t';

创建员工表

create external table if not exists emp( empno int,
ename string, job string, mgr int,
hiredate string, sal double,
comm double, deptno int)
row format delimited fields terminated by '\t';

查看表格式化数据

hive (default)> desc formatted dept;
 Table Type:	EXTERNAL_TABLE
管理表与外部表的互相转换

修改内部表 student2 为外部表

alter table student2 set tblproperties('EXTERNAL'='TRUE'); 

修改外部表 student2 为内部表

alter table student2 set tblproperties('EXTERNAL'='FALSE'); 

注意:(‘EXTERNAL’=‘TRUE’)和(‘EXTERNAL’=‘FALSE’)为固定写法,区分大小写!