内部表
写语句时未被external修饰的表是内部表
特点:
当删除该表时,表的元数据也会跟着被删除,会影响其他使用该数据的表
代码演示
- 1. 创建一个数据
- 2. 将本机上的文件上传到hdfs中去
- 3.分别创建两个表 tb_t1 tb_t2
create table tb_t1(
id int,
name string,
age int,
gender string
)
row format delimited fields terminated by ","
location "hdfs://linux01:8020/data/log";
create table tb_t2(
id int,
name string,
age int,
gender string
)
row format delimited fields terminated by ","
location "hdfs://linux01:8020/data/log";
- 4. 查看表内信息
、
- 5.删除tb_t2后
- 6. 查看tb_1的内容
从以上的操作可以看出两个表共同使用一个信息,如果删除一个表的元数据的话,HDFS上的存储数据也会跟着删除,导致另外的表的数据也会丢失。
不加external会默认为内部表(管理表)
对于一些公共的数据源使用外部表. 对于保存的一些业务维度表或者是统计好的报表使用管理表(内部表)
外部表
写语句时用external修饰的表成为外部表
外部表跟HDFS存储的数据是分离的,当删除表的元数据时,不会对元数据造成影响,
create external table tb_log2( --外部表
id int ,
name string
)
代码演示
- 1. 将数据上传到HDFS上
- 2. 创建两个表tb_t1 tb_t2
create external table tb_t1(
id int,
name string,
age int,
gender string
)
row format delimited fields terminated by ","
location "hdfs://linux01:8020/data/log";
create external table tb_t2(
id int,
name string,
age int,
gender string
)
row format delimited fields terminated by ","
location "hdfs://linux01:8020/data/log";
- 3. 查看表内的信息
- 4. 删除tb_t2
5. 查看tb_t1的元数据
发现即使删除了tb_t2表,但是公用存储数据的tb_t1表的元数据没有被删除