一、内部表
1、基本介绍
(CREATE TABLE table_name ......
)
未被external
关键字修饰的即是内部表, 即普通表。 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir
参数决定(默认:/user/hive/warehouse
),删除内部表会直接删除元数据(metadata
)及存储数据,因此内部表不适合和其他工具共享数据。
2、创建表和数据
创建表并插入几条数据
sql
create table if not exists stu(id int,name string);
insert into stu values (1,"zhangsan");
insert into stu values (2, "wangwu");
select * from stu;
查看hadoop
中数据位置
会发现看不出有分隔符
。
默认的数据分隔符是:"\001"
是一种特殊字符,是ASCII
值,键盘是打不出来
3、自定义表的分隔符
sql
create table if not exists stu2(id int ,name string) row format delimited fields terminated by '\t';
查看hadoop
数据
发现,已经是\t
分割了
4、删除表
sql
DROP table stu2;
查看hadoop
数据
发现hdfs
中的stu2
数据也被删除了
查看MySQL中的元数据
sql
SELECT * FROM TBLS ;
也是没有stu2
的元数据信息
二、外部表
1、基本介绍
(CREATE EXTERNAL TABLE table_name ......LOCATION......
)
被external
关键字修饰的即是外部表, 即关联表。
外部表是指表数据可以在任何位置,通过LOCATION
关键字指定。 数据存储的不同也代表了这个表在理念是并不是Hive
内部管理的,而是可以随意临时链接到外部数据上的。
所以,在删除外部表的时候, 仅仅是删除元数据(表的信息),不会删除数据本身。