启动hive
1)启动hadoop:start-all.sh
2)启动mysql:service msyqld start
3)启动hive:hive
quit;
hive应用1
1.本地编辑stu文件
2.创建数据库
hive> create database mydb;
hive> use mydb;
3.创建表
hive> create table if not exists stu
> (name string,age int,sex string)
> row format delimited fields terminated by '\t';
创建的是内部表
内部表与外部表的区别:
删除内部表:会删除表结构和数据
删除外部表:只删除表结构,数据仍然存在
4.加载数据
hive> load data local inpath '/home/wg/mydata/stu' into table stu;
加载数据4中方式:
方式1:hive> load data local inpath '路径'[overwrite] into table 表名;
方式2:hadoop fs -put 源文件路径 上传路径
方式3:通过查询语句向表中插入数据
insert overwrite table 表名1 select * from 表名2;
方式4:通过查询语句创建表并加载数据
create table 新表名 as select * from 旧表名;
5.查看数据
hive> select * from stu;
6.删除表
hive> drop table stu;
7.删除数据库
hive> drop database mydb; //数据库无表
hive> drop database mydb cascade; //删除有表的数据库
hive应用2
sogou.500w.utf8结构:
ts 搜索时间
uid 用户id
kw 搜索的关键字
rank 搜索结果的排序
orders 点击次数
url 访问路径
1 创建数据库
create database mydb;
use mydb;
2 创建表
hive> create external table if not exists sogou
> (ts string,uid string,kw string,rank int,orders int,url string)
> row format delimited fields terminated by '\t'
> location '/input/sogoudata';
3 加载数据
[wg@master mydata]$ hadoop fs -put sogou.500w.utf8 /input/sogoudata
4 查询记录中的前三条记录
hive> select * from sogou limit 3;
说明:这条语句没有编译成mapreduce任务
5.统计数据总数
hive> select count(*) from sogou;
6.统计uid总数
hive> select count(distinct(uid)) from sogou;
1352664
7.统计uid平均查询次数
sum(a.cnt):用户查询次数的总和
count(a.uid):用户个数
平均查询次数=sum(a.cnt)/count(a.uid)
a结构
select uid,count(*) as cnt from sogou group by uid
uid cnt
1 3
2 4
3 5 (数据太多,不全部展示,就像左边示例那样)
hive> select sum(a.cnt)/count(a.uid) from
> (select uid,count(*) as cnt from sogou group by uid)a;
3.6964094557111005
8.查询频度最高的前10个关键字
kw count
aaa 10
bbb 9
ccc 8
hive> select kw,count(*) as cnt from sogou group by kw order by cnt desc limit 10;
百度 38441
baidu 18312
人体艺术 14475
4399小游戏 11438
qq空间 10317
优酷 10158
新亮剑 9654
馆陶县县长闫宁的父亲 9127
公安卖萌 8192
百度一下 你就知道 7505
9.查询搜索过“仙剑奇侠传”且次数大于3的uid
uid cnt
1 3
2 4
3 5
6 7
hive> select uid,count(*) as cnt from sogou
> where kw like '%仙剑奇侠传%' group by uid having cnt>3;
0b645e637047efbec2574c7ae90f60bf 4
0d14ebeaf5c4429a519f0aa8b73e8b93 5
0f8156eae0979d732c2495a8089639b1 7
10097da93c4847bb2f3e007e4b20e728 6
1adfdb8126ac8e253368e2c83824ca34 5
1fc93c6cea9a25549c6098ce80c8c4b1 5
10.统计搜索过“仙剑奇侠传”的用户还搜索过哪些内容
uid kw
1 aaa
2 bbb
3 ccc
select distinct m.uid,m.kw from sogou m join
(select distinct uid from sogou where kw like '%仙剑奇侠传%')n
on m.uid=n.uid where m.kw not like '%仙剑奇侠传%';
fdabb8fa7a5c8b902d02c9d0d5fae045 辛亥革命
fdabb8fa7a5c8b902d02c9d0d5fae045 辽源职业技术学院教务处
fdc77edda794e003fb7bee24d5f684a0 纯音乐莫失莫忘
ffceeeec05b370a909e59d00bf94865b 单机游戏排行榜
ffceeeec05b370a909e59d00bf94865b 红色警戒2兵临城下
ffceeeec05b370a909e59d00bf94865b 红色警戒2尤里的复仇
练习:
1)查询关键字不为空的记录总数
select count(*) from sougou where kw is not null;
2)统计查询次数大于2次的用户总数
select count(uid) from
> (select uid,count(*) as cnt from sougou group by uid having cnt > 2)a;
结果:546353
3)查询次数大于2次的所有信息显示出来
select kw from
(select kw,count(*) as cnt from sougou group by kw having cnt > 2)a;