Hive数据仓库数据分析

简介: Hive数据仓库数据分析

1 创建数据仓库

我们的目标是在Hive中创建数据仓库,以便利用Hive的查询功能实现交互式数据处理,所以接下来在Hive客户端进行操作。确保Hadoop和MySQL服务已经启动后再进入Hive客户端,命令如图10-11所示。

hive

create database sogou;

下面,我们来创建一个外部表,命令如下:

create external table sogou.sogou_20211103(
`time` string,
`uid` string,
`keywords` string,
`rank` int,
`ordering` int,
`url` string)
comment 'This is the sogou search data of one day'
row format delimited
fields terminated by '\t'
stored as textfile
location '/sogou/20211103';

show create table sogou.sogou_20211103;

describe sogou.sogou_20211103;

drop table sogou.sogou_20211103;

2 创建Hive分区表

我们正式创建一个外部表,该表包含了扩展字段(即year、month、day、hour),命令如下:

create external table sogou.sogou_ext_20211103(
`time` string,
`uid` string,
`keywords` string,
`rank` int,
`ordering` int,
`url` string,
`year` int,
`month` int,
`day` int,
`hour` int)
comment 'This is the sogou search data extend'
row format delimited
fields terminated by '\t'
stored as textfile
location '/sogou_ext/20211103';

在上述命令中,特别要注意,“location”后面的“/sogou_ext/20211103”就是我们在前面创建的HDFS目录,并且已经上传了sogou.500w.utf8.flt文件。

接着创建带分区的表,命令如下:

create external table sogou.sogou_partition(
`time` string,
`uid` string,
`keywords` string,
`rank` int,
`ordering` int,
`url` string)
partitioned by (
`year` int,
`month` int,
`day` int,
`hour` int)
row format delimited
fields terminated by '\t'
stored as textfile;

最后向数据库中导入数据,命令是:

set hive.exec.dynamic.partition.mode=nonstrict;
insert overwrite table sogou.sogou_partition partition(year, month,day,hour)        select * from sogou.sogou_ext_20211103;

查询导入数据的命令是:

select * from sogou_ext_20211103 limit 10;

其他查询命令还有:

select url from sogou_ext_20211103 limit 10;

select * from sogou_ext_20211103 where uid='96994a0480e7e1edcaef67b20d8816b7';

3 数据分析

3.1 统计总记录数

select count(*) from sogou_ext_20211103 ;

3.2 统计非空记录数

select count(*) from sogou_ext_20211103 where keywords is not null and keywords!='';

统计独立uid总数的命令是:

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

3.3 关键词分析

统计关键词长度的命令是:

select avg(a.cnt) from (select size(split(keywords,'\\s+')) as cnt from sogou.sogou_ext_20211103 ) a;
select keywords, count(*) as cnt from sogou.sogou_ext_20211103 group by keywords order by cnt desc limit 20;

频度排名(即频度最高的前20个词)的命令是:

你看看搜狗搜索,搜索最多的是百度.

3.4 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_20211103 group by uid) uids;

统计平均查询次数的命令是:

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

统计查询次数大于2次的用户总数的命令是:

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

4 用户行为分析

4.1 单击次数与rank之间的关系

下面我们来计算rank在10以内的单击次数占比。首先执行:

select count(*) from sogou.sogou_ext_20211103 where rank<11;

然后执行:

>select count(*) from sogou.sogou_ext_20161202;

1b62f6e133f7434b851ec532e24a19b3.png

我们知道,用户上网查询往往只会浏览搜索引擎返回结果的前10个项目,也就是位于第一页的内容。这个用户行为说明,尽管搜索引擎返回的结果数目十分庞大,但是真正可能被用户关注的内容往往很少,只有排在最前面的很小部分会被用户浏览到,所以传统的基于全部返回值计算的查全率、查准率的评价方式已经不适应网络信息检索的评价。正确的评价方式应该强调评价指标中有关最靠前的结果与用户查询需求之间的相关性。


我们再来研究直接通过输入URL进行查询的占比:

>select count(*) from sogou.sogou_ext_20211103 where keywords like ‘%www%’;
>select count(*) from sogou.sogou_ext_20211103 ;

实际结果是73979/5000000,等于0.0147958。这个比例是很低的,说明绝大部分用户不会采用URL进行查询。想想也很自然,如果用户知道了URL,完全可以直接在浏览器地址栏输入URL进行查询,没有必要再通过搜索引擎重复一遍。


另外,在通过URL进行的查询中,我们还可以计算用户单击了其输入的URL网址的次数,并计算占比。

select count(*) from sogou.sogou_ext_20211103 where keywords like ‘%www%’;
select count(*) from sogou.sogou_ext_20211103 ;

27561/73979=0.37255167即我们关心的结果。从这个比例可以看出,有37%的用户(因该说是很大一部分)提交了URL进行查询,并且继续单击了查询的结果。这可能是由于用户没有记全URL等原因,而想借助搜索引擎来找到自己想要的网址。因此,这个分析结果就提示我们,搜索引擎在处理这一部分查询请求时,一个可能比较理想的改进方式就是,首先把相关的完整URL返回给用户,这样就有较大可能改善用户的查询体验,满足用户的需求。

4.2 个性化行为分析

例如,如果想知道搜索过“csdn”且次数大于2的uid,可使用下面的命令:

select uid,count(*) as cnt from sogou.sogou_ext_20211103 where keywords='csdn' group by uid having cnt >1;

5 实时数据

在实际应用中,为了实时地显示当天搜索引擎的搜索数据,首先需要创建一些临时表,然后在一天结束后对数据进行处理,并将数据插入临时表中。

  1. 创建临时表
    创建临时表的命令是:
>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;
  1. 插入数据
>insert overwrite table sogou.uid_cnt select uid, count(*) as cnt
>from sogou.sogou_ext_20211103 group by uid;

这样前端开发人员就可以访问该临时表,并将数据显示出来,显示方式可以根据实际需要来进行设计,如表格、统计图等。


目录
相关文章
|
6月前
|
SQL 存储 分布式计算
Hive数据仓库设计与优化策略:面试经验与必备知识点解析
本文深入探讨了Hive数据仓库设计原则(分区、分桶、存储格式选择)与优化策略(SQL优化、内置优化器、统计信息、配置参数调整),并分享了面试经验及常见问题,如Hive与RDBMS的区别、实际项目应用和与其他组件的集成。通过代码样例,帮助读者掌握Hive核心技术,为面试做好充分准备。
560 0
|
6月前
|
SQL Cloud Native 数据挖掘
云原生数据仓库产品使用合集之在使用 ADB 进行数据分析处理时,出现分区倾斜的情况,如何解决
阿里云AnalyticDB提供了全面的数据导入、查询分析、数据管理、运维监控等功能,并通过扩展功能支持与AI平台集成、跨地域复制与联邦查询等高级应用场景,为企业构建实时、高效、可扩展的数据仓库解决方案。以下是对AnalyticDB产品使用合集的概述,包括数据导入、查询分析、数据管理、运维监控、扩展功能等方面。
|
6月前
|
SQL 数据采集 存储
Hive实战 —— 电商数据分析(全流程详解 真实数据)
关于基于小型数据的Hive数仓构建实战,目的是通过分析某零售企业的门店数据来进行业务洞察。内容涵盖了数据清洗、数据分析和Hive表的创建。项目需求包括客户画像、消费统计、资源利用率、特征人群定位和数据可视化。数据源包括Customer、Transaction、Store和Review四张表,涉及多个维度的聚合和分析,如按性别、国家统计客户、按时间段计算总收入等。项目执行需先下载数据和配置Zeppelin环境,然后通过Hive进行数据清洗、建表和分析。在建表过程中,涉及ODS、DWD、DWT、DWS和DM五层,每层都有其特定的任务和粒度。最后,通过Hive SQL进行各种业务指标的计算和分析。
959 1
Hive实战 —— 电商数据分析(全流程详解 真实数据)
|
6月前
|
SQL 数据挖掘 HIVE
【Hive SQL 每日一题】在线课程学生行为数据分析
该数据分析师任务是分析在线学习平台的学生行为,以优化课程内容和学习体验。提供的数据包括`students`表(含学生ID、姓名、年龄和性别)和`course_activity`表(含活动ID、学生ID、课程ID、活动日期和学习时长)。分析涉及:1) 学生参加的课程数量,2) 课程总学习时长,3) 按性别分组的平均学习时长,4) 学生首次参加的课程及日期,5) 学生最近一次学习的时长,以及6) 参与学生最多的课程。所有查询都使用了SQL,部分涉及窗口函数和分组统计。数据集可在给定链接下载。
65 2
|
6月前
|
SQL 分布式计算 关系型数据库
【数据仓库与联机分析处理】数据仓库工具Hive
【数据仓库与联机分析处理】数据仓库工具Hive
112 6
|
5月前
|
SQL 存储 关系型数据库
杨校老师课题之Hive数据仓库搭建2
杨校老师课题之Hive数据仓库搭建
49 0
|
5月前
|
SQL 存储 关系型数据库
杨校老师课题之Hive数据仓库搭建1
杨校老师课题之Hive数据仓库搭建
76 0
|
6月前
|
SQL 分布式计算 Hadoop
利用Hive与Hadoop构建大数据仓库:从零到一
【4月更文挑战第7天】本文介绍了如何使用Apache Hive与Hadoop构建大数据仓库。Hadoop的HDFS和YARN提供分布式存储和资源管理,而Hive作为基于Hadoop的数据仓库系统,通过HiveQL简化大数据查询。构建过程包括设置Hadoop集群、安装配置Hive、数据导入与管理、查询分析以及ETL与调度。大数据仓库的应用场景包括海量数据存储、离线分析、数据服务化和数据湖构建,为企业决策和创新提供支持。
716 1
|
6月前
|
SQL 存储 分布式计算
基于Hadoop数据仓库Hive1.2部署及使用
基于Hadoop数据仓库Hive1.2部署及使用
|
6月前
|
存储 SQL 分布式计算
【Hive】为什么要对数据仓库分层?
【4月更文挑战第15天】【Hive】为什么要对数据仓库分层?

热门文章

最新文章