默认创建的表都是管理表(MANAGED_TABLE
),即内部表;
Hive控制内部表数据的生命周期
:默认情况下会将内部表的数据存储在由配置项hive.metastore.warehouse.dir
所定义的目录的子目录下。 当删除一个内部表时,Hive同时会删除表中的数据;
内部表不适合与其他工具共享数据。
查询表的类型
desc formatted 表名;
EXTERNAL关键字
可以让用户创建一个外部表,在建表的同时可指定一个指向实际数据的路径(LOCATION)
(内部表和外部表建表均可指定);
在删除表的时候,Hive认为其并非完全拥有外部表的数据的所有权。删除外部表仅删除描述表的元数据信息,数据会被保留。
(1)准备一份emp.txt文件上传到hdfs
7369 SMITH CLERK 7902 1980-12-17 800.00 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981-2-22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981-4-2 2975.00 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.00 30
7782 CLARK MANAGER 7839 1981-6-9 2450.00 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.00 20
7839 KING PRESIDENT 1981-11-17 5000.00 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1987-5-23 1100.00 20
7900 JAMES CLERK 7698 1981-12-3 950.00 30
7902 FORD ANALYST 7566 1981-12-3 3000.00 20
7934 MILLER CLERK 7782 1982-1-23 1300.00 10
hdfs dfs -copyFromLocal ./emp.txt /wcinput/
(2)在hive上创建外部表,并指定路径
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'
location '/wcinput';
(3)查看表类型
desc formatted emp;
(4)删除外部表
元数据被删除:
数据仍然保留:
每天日志文件定期流入HDFS文本文件。原始日志表使用外部表,统计分析过程中用到的中间表、结果表使用内部表存储
alter table 表名 set tblproperties('EXTERNAL'='FALSE');
alter table 表名 set tblproperties('EXTERNAL'='TRUE');