Hive内部表和外部表

一:背景

Hive中表分为两大类托管表(Managed table)也称之为受控表或内部表另外一种表是外部表(External table)。默认情况下,创建hive表时,hive会把数据存储到它的数据仓库目录下,这种方式创建的表我们称之为受控表。另外一种方式是创建一个外部表(External table)。此时,我们只需要告诉hive数据的外部引用地址,hive本身不会在自己的数据仓库目录下存储这些数据。


二:示例分析

1.内部表:

drop table if exists employees;
create table if not exists employees(
        name STRING,
        salary FLOAT,
        subordinates ARRAY<STRING>,
        deductions MAP<STRING,FLOAT>,
        address STRUCT<street:STRING,city:STRING,num:INT>
)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n'
stored as textfile
location '/hive/inner';
注:location表示指向实际数据的路径(HDFS中的路径)


这样我们就在Hive里面创建了一张内部表,现在我们来给这张表插入数据:

hive> load data local inpath '/usr/local/src/employee_data' into table employees;
Copying data from file:/usr/local/src/employee_data
Copying file: file:/usr/local/src/employee_data
Loading data to table hive.employees
OK
Time taken: 0.14 seconds

当我们插入数据后,实际数据会保存在我建表指定的路径下(我这里是hdfs://XXX:9000/hive/inner目录下),不配置时会在默认的数据仓库的位置。

本地文件中数据的格式应该和表结构对应:


注:千万要注意一点就是,做表删除操作,当删除一张内部表时,存储数据的目录也会被删除,也就是说我们的实际数据也会被删除。这也是内部表比较恶心。还好外部表可以解决这个问题。


2.外部表

drop table if exists employees;
create external table if not exists employees(
        name STRING,
        salary FLOAT,
        subordinates ARRAY<STRING>,
        deductions MAP<STRING,FLOAT>,
        address STRUCT<street:STRING,city:STRING,num:INT>
)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':'
lines terminated by '\n'
stored as textfile
location '/hive/external';

插入数据:

 load data local inpath '/usr/local/src/employee_data' into table employees;
Copying data from file:/usr/local/src/employee_data
Copying file: file:/usr/local/src/employee_data
Loading data to table default.employees
OK

注:删除外部表时保存在HDFS中的实际数据并不会被删除。这也是不同于内部表的一个重要特性!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值