hive数据分析-001

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;

在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值