hive内部表与外部表入门

表分类

在Hive中,表类型主要分为两种,

第一种:内部表

  • 也叫管理表
  • 表目录会创建在集群上的{hive.metastore.warehouse.dir}下的相应的库对应的目录中。
  • 默认创建的表就是内部表

第二种:外部表

  • 外部表需要使用关键字"external",
  • 外部表会根据创建表时LOCATION指定的路径来创建目录,
  • 如果没有指定LOCATION,则位置跟内部表相同,一般使用的是第三方提供的或者公用的数据。
  • 建表语法:必须指定关键字external
create external table tableName(id int,name string) [location 'path'];

内部表和外部表转换:

内部表转外部表

alter table tableName set tblproperties('EXTERNAL'='TRUE');
--注意:内部表转外部表,true一定要大写;

外部表转内部表

alter table tableName set tblproperties('EXTERNAL'='false');
--说明:false不区分大小

两者之间区别

1) 内部表和外部表在创建时的差别

就差两个关键字,EXTERNALLOCATION
举例:

- 内部表 -- 
- CRAATE TABLE T_INNER(ID INT);
- 外部表 -- 
- CREATE EXTERNAL TABLE T_OUTER(ID  INT) LOCATION 'HDFS:///AA/BB/XX'; 

2) Hive表创建时要做的两件事

  1. hdfs下创建表目录

  2. 在元数据库mysql创建相应表的描述数据(元数据)

3) drop时有不同的特性
1、drop时,元数据都会被清除
2、drop时,内部表的表目录会被删除,但是外部表的表目录不会被删除。

4) 使用场景

内部表: 平时用来测试或者少量数据,并且自己可以随时修改删除数据.

外部表:使用后数据不想被删除的情况使用外部表(推荐使用)所以,整个数据仓库的最底层的表使用外部表

案例

创建内部表

create table innerdemo
(
    empno    int,
    ename    string,
    job      string,
    mgr      int,
    hiredate date,
    sal      double,
    comm     double,
    deptno   int
)
    row format delimited
        fields terminated by ','
    stored as textfile;

创建后在hdfs上的存储位置如下,因为没有指定存储位置,所以默认存储位置就是在如下地方

/user/hive/warehouse/innerdemo

接下来删除内部表测试

drop table  innerdemo;

去hdfs上查看,可以看到原文件已被删除.

创建外部表

create external table externaldemo
(
    empno    int,
    ename    string,
    job      string,
    mgr      int,
    hiredate date,
    sal      double,
    comm     double,
    deptno   int
)
    row format delimited
        fields terminated by ','
    stored as textfile
location 'hdfs:///hiveout';
insert into table externaldemo select * from emp;

此时在hdfs上的位置如下,文件名还是0000 这个是惯例
在这里插入图片描述

接下来删除外部表测试

drop table externaldemo;

hdfs上就会发现文件还是存在的!并不会真的删除文件

总结

  • 内部表可以用于测试
  • 外部表比较安全,删除的时候不会真的删除,只是删除mysql里面的元信息,而不会删除真正的数据文件
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值