Hive 创建外部表

1. 将数据上传至 hdfs

hdfs dfs -put stocks /user/bigdata

164154_MlMM_1411151.png

2. 创建外部表

create external table if not exists stocks_external(
ymd date,
price_open float,
price_high float,
price_low float,
price_close float,
volume int,
price_adj_close float
)
partitioned by (exchanger string,symbol string)
row format delimited fields terminated by ','
location '/user/bigdata/stocks';

3. 载入数据

alter table stocks_external add partition(exchanger="NASDAQ", symbol="AAPL") 
location '/user/bigdata/stocks/NASDAQ/AAPL';

alter table stocks_external add partition(exchanger="NASDAQ", symbol="INTC") 
location '/user/bigdata/stocks/NASDAQ/INTC';

alter table stocks_external add partition(exchanger="NYSE", symbol="IBM") 
location '/user/bigdata/stocks/NYSE/IBM';

alter table stocks_external add partition(exchanger="NYSE", symbol="GE") 
location '/user/bigdata/stocks/NYSE/GE';

-- 展示分区信息
show partitions stocks_external;

4. 查询表

select * from stocks_external where exchanger = 'NASDAQ' and symbol = 'AAPL' limit 10;

select ymd, price_close from stocks_external where exchanger = 'NASDAQ' and symbol = 'AAPL' limit 10;

select exchanger, symbol, count(*) from stocks_external group by exchanger,symbol;

select exchanger, symbol, max(price_high) from stocks_external group by exchanger, symbol;

5. 删除表

-- 删除外部表
drop table stocks_external;
-- 查看 hdfs 上的数据,删除外部表是只删除表的元数据,不删除表的实际数据,这点和
hdfs dfs -ls /user/bigdata

最后归纳一下Hive中表与外部表的区别:
  1、在导入数据到外部表,数据并没有移动到自己的数据仓库目录下,也就是说外部表中的数据并不是由它自己来管理的!而表则不一样;
  2、在删除表的时候,Hive将会把属于表的元数据和数据全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据是不会删除的!
  那么,应该如何选择使用哪种表呢?在大多数情况没有太多的区别,因此选择只是个人喜好的问题。但是作为一个经验,如果所有处理都需要由Hive完成,那么你应该创建表,否则使用外部表!

转载于:https://my.oschina.net/zdtdtel/blog/1613061

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值