1.地铁票价案例
创建用户信息表 person.txt、票价信息表 ticket.txt
CREATE TABLE IF NOT EXISTS person(
name STRING,
station INT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as textfile;
CREATE TABLE IF NOT EXISTS ticket(
station INT,
price FLOAT
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as textfile;
加载数据到hive表
load data local inpath '/home/hadoop/data/ticket.txt' into table ticket;
load data local inpath '/home/hadoop/data/person.txt' into table person;
案例需求
(1).按照用户座的站数算对应价格
select
p.name,
t.price
from person p left join ticket t
on p.station=t.station;
(3).根据用户座的站数算对应价格(5到10站打9折、11站以上打8折)
select
p.name,
case when p.station>11 then t.price*0.8
when p.station<5 then t.price
else t.price*0.9 end
from person p left join ticket t
on p.station=t.station;
内部表,外部表
如果数据已经落定HDFS的source目录下,如果创建hive表管理数据
hadoop fs -ls /source
-rw-r--r-- 3 hadoop supergroup 2276 2018-06-06 06:22 /source/flow.log
创建外表表关联已经落地的数据!
CREATE EXTERNAL TABLE IF NOT EXISTS extlog(
id string,
phonenumber bigint,
mac string,
ip string,
url string,
tiele string,
colum1 string,
colum2 string,
colum3 string,
upflow int,
downflow int )
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as textfile
location '/source';
select * from extlog;
删除命令
drop table extlog;
注:元数据被删除掉,但是HDFS上的需要分析的数据被保留了。
Hive管理表与外部表的总结
建表时添加EXTERNAL关键字的表称之为外部表,没有添加关键字的表为内部表或者管理表外部表。外部表特点是删除时只删除元数据; 内部表特点将元数据和表的仓库数据也删除了。
Hive管理表与外部表使用场景
外部表:与其他应用程序共享数据,常用于待分析数据日志、 源数据日志,定期将外部数据映射到表中。
内部表(管理表):自己管理数据的生命周期,常用于存储分析结果数据。
注意:内部表建表时如果需要指定位置请确保指定的位置不被其他人使用,因为内部表删除的时候会将目录和数据同时删除,一般使用内部表时都不指定数据位置。
内部表和外表表的使用案例
确保hdfs:///source目录下有日志文件
创建日志库(日志层)
CREATE DATABASE IF NOT EXISTS log;
CREATE EXTERNAL TABLE IF NOT EXISTS log.phlog(
id string,
phonenumber bigint,
mac string,
ip string,
url string,
tiele string,
colum1 string,
colum2 string,
colum3 string,
upflow int,
downflow int)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
stored as textfile
location '/source';
创建结果库(结果层)
CREATE DATABASE IF NOT EXISTS result;
CREATE TABLE IF NOT EXISTS result.flowsum(
phonenumber bigint,
flowsum bigint
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
stored as textfile;
需求:统计每一个手机号的总流量!
insert into table result.flowsum
select phonenumber,sum(upflow+downflow) from log.phlog group by phonenumber;