4.4 内部表和外部表

Hive 的表在逻辑上有两部分组成:

  1. 存储的数据. 真实的存储的数据在 Hive 中都是以文件的形式存在, 这个其他的普通的关系型数据库有差别. Hive 的数据一般存储在 HDFS 中

  2. 表示表中数据的元数据. Hive 把元数据存储在通常的数据库中. 比如默认情况我们所有表的元数据都是存储在 derby 数据库中. 也可以不用 derby, 整合成大家都比较熟悉的 MySql 数据库.


4.4.1 内部表

Hive 的数据存储在 HDFS 系统中, 如果创建表的时候, Hive 把数据迁移到数据仓库中(/user/hive/warehouse)中, 这种表我们把它称为内部表或者管理表,托管表

Hive 默认情况创的表都是内部表.

当向内部表加载数据(load)的时候, 数据会迁移到数据仓库中(这里指的是从 HDFS 加载数据才会迁移, 从本地文件不会).

当删除表(drop)的时候, 表的元数据和实际存储的数据都会被删除. 所以数据彻底会消失.

内部表使用简单, 但是不方便的地方是不能与其他应用程序共享数据

4.4.2 外部表

创建表的时候加入关键字external, 这样创建的表就是外部表.

事实上, 在创建外部表的时候, Hive 甚至就不检查这个数据是否存在. 这是一个非常有用的特性,因为这意味着你可以把创建数据推迟到创建表之后.

删除外部表的时候, Hive 只会删除表的元数据,并不会删除数据.


4.4.3 实操

分别创建部门和员工外部表,并向表中导入数据。

dept.txt

10    ACCOUNTING    1700
20    RESEARCH    1800
30    SALES    1900
40    OPERATIONS    1700

emp.txt

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

创建部门表:

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';

向表中导入数据:

load data local inpath '/opt/module/datas/dept.txt' into table default.dept;

load data local inpath '/opt/module/datas/emp.txt' into table default.emp;

查看表格式化数据:

desc formatted dept;


4.4.4 内部表和外部表的互换

  1. dept.txt 变成内部表(管理表)

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

  2. stu变成外部表

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

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

Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2018-12-11 21:52:03

results matching ""

    No results matching ""