hive实例-分析每个月的查询量

案例描述,现在mysql里面有如下的表结构与表数据:

image.png

search_time:表示某一个时刻

search_text:表示某一个时刻搜索了什么内容

现在的需求是这样子的:要求统计出每一个月的查询总量,需求很简单,在MySQL中可以这样写:

SELECT DATE_FORMAT(search_time,'%Y-%m') yuefen,count(*) totalsearch FROM searchword 
GROUP BY DATE_FORMAT(search_time,'%Y-%m')

结果如图:

image.png

这没有什么问题,因为数据量比较小,但是如果这个表内容非常大,用mysql分析起来就很慢了,这时候就应想到hive了。这样子,需求就转变到了如何使用hive完成这件事的问题。

一、我格式化下要处理的数据,也就是数据源,并上传到hive所在机器上,命名为search.txt,路径为/root/search.txt内容如下:

2016-01-10 13:11:04	|	tomcat
2016-01-18 13:10:11	|	cms
2017-08-04 01:59:01	|	iframe
2017-08-10 17:58:01	|	java内存溢出
2017-08-10 23:01:00	|	慢
2017-09-22 04:59:01	|	cms
2017-09-24 22:00:00	|	javaweb
2017-09-29 20:52:04	|	validate
2017-09-30 14:00:02	|	JAVA_OPTS
2017-10-25 10:12:00	|	ssh
2017-10-30 07:59:01	|	根目录
2017-10-31 01:00:59	|	tomcat
2017-11-24 23:00:00	|	java
2017-11-25 06:00:00	|	href
2017-11-25 09:01:01	|	tar
2017-11-26 01:01:59	|	tomcat
2017-11-26 03:04:59	|	jdk
2017-11-27 03:00:00	|	环境
2017-11-27 04:00:00	|	5.0
2017-11-27 22:00:00	|	svn
2017-12-01 02:56:00	|	Java
2017-12-01 04:00:00	|	bootstrap table
2017-12-01 21:01:59	|	自动完成
2017-12-04 04:44:23	|	jps
2017-12-04 22:22:00	|	svn
2017-12-05 07:30:20	|	adfds
2017-12-06 04:50:43	|	df
2017-12-06 12:02:02	|	a
2017-12-15 09:11:41	|	安装
2017-12-21 00:00:12	|	tomcat
2017-12-21 00:57:00	|	CSS
2017-12-21 07:00:00	|	图片轮播js
2017-12-21 09:20:00	|	redis
2017-12-21 21:32:10	|	adfsd

二、创建hive数据库:

hive> create database if not exists  lzzcmsdb;

OK

Time taken: 0.555 seconds

三、选中要使用的数据库:

hive> use lzzcmsdb;
OK
Time taken: 0.057 seconds

四、hive中创建表:

create table t_searchword(
  search_time string,
  search_text string
)
row format delimited fields terminated by '|' stored as textfile;

五、把/root/search.txt导入到t_searchword中去:

hive> load data local inpath  '/root/search.txt' into table t_searchword;
Loading data to table lzzcmsdb.t_searchword
Table lzzcmsdb.t_searchword stats: [numFiles=1, totalSize=977]
OK
Time taken: 1.512 seconds

六、查看一下,发现没有问题:

image.png

七、hive sql也叫做hsql,跟关系型数据的sql没有多大区别,我们把上边统计每个月查询总量的sql改把改把,改为下面的形式:

SELECT from_unixtime(unix_timestamp(search_time),'yyyyMM') yuefen,count(*) totalsearch FROM t_searchword GROUP BY from_unixtime(unix_timestamp(search_time),'yyyyMM');执行吧,看看结果与前边在mysql中得到的结果是否相同:

image.png

我们把红框里面的结果跟前边给出的在mysql里面执行的结果比较一下,结果完全相同,用hive成功完成了任务。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值