hive实操(搜狗500w数据)

启动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;

原创文章 100 获赞 151 访问量 7万+

猜你喜欢

转载自blog.csdn.net/weixin_44593822/article/details/105766891
今日推荐