区别
内部表 :管理元数据(记录数据的文件和目录的信息)和数据。当删除内部表时,会删除数据和表的元数据,所以当多个表关联同一个文件时,其中一个表删除了,其他表也将会没有数据。
外部表:只管理元数据。删除表并不会影响其他表数据。【推荐】
内部表实例
准备数据
bash
1,张三,工程部,75000
2,李四,市场部,80000
3,王五,财务部,85000
4,赵六,工程部,95000
5,孙七,人事部,60000
建库
bash
-- 创建库
drop database if exists db_2 cascade;
create database db_2;
use db_2;
建表:分别创建3个内部表 依赖同一个文件
bash
-- 1.1 创建内部表 依赖 文件1
CREATE TABLE IF NOT EXISTS db_2.employee (
id INT,
name STRING,
department STRING,
salary FLOAT
)
row format delimited fields terminated by ','
location '/test/external/employee_data'
;
select * from db_2.employee;
-- 1.2 创建内部表2 依赖 文件1
CREATE TABLE IF NOT EXISTS db_2.employee_2 (
id INT,
name STRING,
department STRING,
salary FLOAT
)
row format delimited fields terminated by ','
location '/test/external/employee_data'
;
select * from db_2.employee_2;
-- 1.3 创建内部表3 依赖 文件1
CREATE TABLE IF NOT EXISTS db_2.employee_3 (
id INT,
name STRING,
department STRING,
salary FLOAT
)
row format delimited fields terminated by ','
location '/test/external/employee_data'
;
select * from db_2.employee_3;
查看数据
bash
-- 验证数据加载
SELECT * FROM tb_archer;
删除数据
bash
-- 删除内部表1
drop table db_2.employee;
删除内部表后,数据也被删除了
删除内部表1,内部表2和内部表3没有数据
外部表实例
准备数据
bash
-- 2.1 创建外部表 依赖 文件1
CREATE external TABLE IF NOT EXISTS db_2.tb_employee_external (
id INT,
name STRING,
department STRING,
salary FLOAT
)
row format delimited fields terminated by ','
location '/test/external/employee_data'
;
-- 1.2 创建外部表2 依赖 文件1
CREATE external TABLE IF NOT EXISTS db_2.tb_employee_external_2 (
id INT,
name STRING,
department STRING,
salary FLOAT
)
row format delimited fields terminated by ','
location '/test/external/employee_data'
;
-- 1.3 创建外部表3 依赖 文件1
CREATE external TABLE IF NOT EXISTS db_2.tb_employee_external_3 (
id INT,
name STRING,
department STRING,
salary FLOAT
)
row format delimited fields terminated by ','
location '/test/external/employee_data'
;
查看数据
bash
select * from db_2.tb_employee_external;
删除数据
bash
drop table db_2.tb_employee_external;
删除外部表,仍然还有数据,只是把元数据删除了
删除外部表后,其他关联数据的表仍有数据