hive3.1.x教程:案例-sogou数据分析

准备数据

详见 链接

上传

上传到 hadoop1 的 /program/data/ 目录

上传数据到 HDFS

判断hdfs上sogou_ext目录是否存在,存在则删除,不存在无操作

hadoop fs -test -e /sogou_ext/

目录以存在,执行删除

hadoop fs -rmr /sogou_ext/

HDFS创建 /sogou_ext/20111230 目录

hadoop fs -mkdir -p /sogou_ext/20111230

上传文件到 /sogou_ext/20111230 目录中

hadoop fs -put /azkaban/data/sogou.txt /sogou_ext/20111230

建库建表

如果存在就删除

drop database if exists sogou cascade;

创建数据库

create database sogou;

创建表

创建外部表,并指定hdfs数据存放目录,字段对应数据文件中的字段

CREATE EXTERNAL TABLE sogou.sogou_ext_20111230(ts STRING, uid STRING, keyword STRING, rank INT, `order` INT, url STRING, year INT, month INT, day INT, hour INT ) COMMENT "This is the sogou search data of extend data" ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" STORED AS TEXTFILE LOCATION "/sogou_ext/20111230";

统计分析1

统计数据中条数

select count(*) from sogou.sogou_ext_20111230;

统计非空查询

select count(*) from sogou.sogou_ext_20111230 where keyword is not null and keyword !="";

无重复总条数

无重复总条数(根据ts、uid、keyword、url)

select count(*) from (select ts,uid,keyword,url from sogou.sogou_ext_20111230 group by ts,uid,keyword,url having count(*) =1) a;

统计独立UID总数

select count(distinct(uid)) from sogou.sogou_ext_20111230;

统计分析2

查询关键词长度统计

select avg(a.cnt) from (select size(split(keyword, "\\s+")) as cnt from sogou.sogou_ext_20111230) a;

查询频度排名(频度最高的前50词)

select keyword,count(*) as cnt from sogou.sogou_ext_20111230 group by keyword order by cnt desc limit 50;

UID分析分析

UID的查询次数分布(查询1次的UID个数,…查询N次的UID个数)

select SUM(IF(uids.cnt=1,1,0)),SUM(IF(uids.cnt=2,1,0)),SUM(IF(uids.cnt=3,1,0)),SUM(IF(uids.cnt>3,1,0)) from(select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid) uids;

UID平均查询次数

select sum(a.cnt)/count(a.uid) from (select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid) a;

查询次数大于2次的用户总数

select count(a.uid) from (select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid having cnt > 2) a;

查询次数大于2次的用户占比

select b.bnt/c.dnt from(select count(a.uid) bnt from (select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid having cnt > 2)a )b,(select count(distinct (uid)) dnt from sogou.sogou_ext_20111230)c;

查询次数大于2次的数据展示

select b.* from (select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid having cnt > 2) a join sogou.sogou_ext_20111230 b on a.uid=b.uid limit 50;

用户行为分析

点击次数与Rank之间的关系分析

Select a.ant/b.bnt from (select count(*) ant from sogou.sogou_ext_20111230 where rank < 11)a,(select count(*) bnt from sogou.sogou_ext_20111230)b;

直接输入URL作为查询词的比例

Select a.ant/b.bnt from (select count(*) ant from sogou.sogou_ext_20111230 where keyword  like "%www%")a,(select count(*) bnt from sogou.sogou_ext_20111230)b;

直接输入URL的查询中,点击数点击的结果就是用户输入的URL的网址 所占的比例

Select c.ant/b.bnt from (select SUM(IF(instr(url,keyword)>0,1,0)) ant from (select * from sogou.sogou_ext_20111230 where keyword  like "%www%") a)c,( select count(*) bnt from sogou.sogou_ext_20111230 where keyword  like "%www%")b;

查询搜索过”仙剑奇侠传“的uid,并且次数大于3

select uid,count(*) as cnt from sogou.sogou_ext_20111230  where keyword="仙剑奇侠传" group by uid having cnt > 3;

查找uid是653d48aa356d5111ac0e59f9fe736429的相关搜索记录

select * from sogou.sogou_ext_20111230 where uid="653d48aa356d5111ac0e59f9fe736429" and keyword like "%仙剑奇侠传%";

查找uid是e11c6273e337c1d1032229f1b2321a75的相关搜索记录

select * from sogou.sogou_ext_20111230 where uid="e11c6273e337c1d1032229f1b2321a75" and keyword like "%仙剑奇侠传%";

uid分析

创建临时表

create table sogou.uid_cnt(uid STRING, cnt INT) COMMENT "This is the sogou search data of one day" ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t" STORED AS TEXTFILE;

查询并插入

INSERT OVERWRITE TABLE sogou.uid_cnt select uid,count(*) as cnt from sogou.sogou_ext_20111230 group by uid;

原文出处:/show_1GW2MdZsM0Qs.html