《Greenplum企业应用实战》一3.2 日志分析

3.2 日志分析

日志分析是网站分析的基础,通过对网站浏览的日志进行分析,可以为网站优化提供数据支持,了解用户群以及用户浏览特性,对改进网站体验,提升流量有非常重要的意义。
下面将通过Greenplum实现一个简单的网站浏览日志的分析。

3.2.1 应用场景描述

分析全网站每分钟的PV、UV,并导出到Excel中,画出折线图。
解析URL,获取URL中的参数列表。
通过URL取得member_id,然后统计当天浏览次数的用户分布,如浏览次数在1~5、6~10、11~50、51~100以及100次以上的这五个区间段分别有多少个用户。

3.2.2 数据Demo

为了简单起见,笔者对数据进行了一些预处理,只保留了几个字段,建表语句及字段描述如下:

DROP TABLE IF EXISTS log_path;
CREATE table log_path(
   log_time  timestamp(0)       --浏览时间
  ,cookie_id varchar(256)       --浏览的cookie_id
  ,url       varchar(1024)      --浏览页面的url
  ,ip        varchar(64)        --用户ip
  ,refer_url varchar(1024)      --来源的url,这里只保留域名
)distributed by(cookie_id);

Demo数据如下:

testDB=# select * from log_path limit 1;
-[ RECORD 1 ]------------------------------------------------
log_time  | 2012-07-14 23:44:58
cookie_id | 119.187.6.228.1337696430725.8
url       | /china.alibaba.com/ims/chat_card_60.htm?member_id=scutshuxue&cssName=default
ip        | 119.178.198.222
refer_url | www2.im.alisoft.com

3.2.3 日志分析实战

  1. PV、UV分布
    cookie_id可以视为唯一的用户标识,故UV可视为去重后的cookie_id数。SQL如下:
SELECT  TO_CHAR(log_time,'yyyy-mm-dd HH24:mi:00')
       ,COUNT(1) pv
       ,COUNT(DISTINCT cookie_id) uv
  FROM log_path
GROUP BY 1
ORDER BY 1;

这里只是较少的样例数据,结果如下:

testDB=# select * from log_pv_uv_result;
      log_time       |  pv  |  uv
---------------------+------+------
 2012-07-14 23:01:00 | 4758 | 1699
 2012-07-14 23:45:00 |  552 |  257
 2012-07-14 23:03:00 | 1656 |  712
 2012-07-14 23:34:00 | 5554 | 1878
 2012-07-14 23:04:00 | 3504 | 1325
 2012-07-14 23:00:00 |   12 |    6
 2012-07-14 23:44:00 | 4498 | 1540
 2012-07-14 23:33:00 |    4 |    2
(8 rows)
将数据导出成csv格式,在Excel中展现,

Copy命令的语法如下:

testDB=# copy log_pv_uv_result to '/tmp/log_pv_uv.csv' csv;
COPY 8

在Excel中打开并画图,结果如图3-6所示。

  1. 解析URL参数
    解析URL,是指通过substring对URL进行正则表达式匹配,将域名取出,例如对于下面这个URL:
http://page.china.alibaba.com/others/feedbackfromalitalk.html

正则表达式\w+://([\w.]+)可以将域名匹配出来。
同样的,可以将参数后面关键字(member_id或memberId)的值获取出来,作为字段member_id。
split_part函数可以将字符串按照某个字符串分割,然后获取其中一个子串。
regexp_split_to_array函数可以将字符串按照某个字符串分割,然后转换为数组变量。

DROP TABLE IF EXISTS log_path_tmp1;
CREATE TABLE log_path_tmp1 AS
SELECT
       log_time
      ,cookie_id
      ,substring(url,E'\\w+://([\\w.]+)') AS host
      ,split_part(url,'?',1) AS url
      ,substring(url,E'member[_]?[i|I]d=(\\w+)') AS member_id
      ,regexp_split_to_array(split_part(url,'?',2),'&')  AS paras
      ,ip
      ,refer_url
  FROM log_path
  DISTRIBUTED BY (cookie_id);

数据Demo的样例数据解析后结果如下:

testDB=#   select * from log_path_tmp1 where member_id='scutshuxue' limit 1;
-[ RECORD 1 ]--------------------------------------------
log_time  | 2012-07-14 23:44:58
cookie_id | 119.187.6.228.1337696430725.8
host      | china.alibaba.com
url       | http://china.alibaba.com/ims/chat_card_60.htm
member_id | scutshuxue
paras     | {member_id=scutshuxue,cssName=default}
ip        | 119.178.198.222
refer_url | www2.im.alisoft.com
  1. 用户浏览次数区间分析
    要计算浏览次数的分布,首先按照cookie_id做聚合,计算出每个cookie_id的浏览次数,之后再用case when对数据进行分区,再聚合,SQL如下:
SELECT CASE WHEN cnt>100 THEN '100+'
            WHEN cnt>50 THEN '51-100'
            WHEN cnt>10 THEN '11-50'
            WHEN cnt>5 THEN '6-10'
            ELSE '<=5' END tag
       ,COUNT(1) AS NUMBER
FROM (
    SELECT cookie_id,COUNT(1) cnt
      FROM log_path_tmp1
     GROUP BY 1
     )t
GROUP BY 1;

结果如下:

tag  | number
-------+--------
 6-10  |    440
 11-50 |    126
 <=5   |   6501
(3 rows)
时间: 2024-09-22 23:39:29

《Greenplum企业应用实战》一3.2 日志分析的相关文章

《Greenplum企业应用实战》一第3章 Greenplum实战3.1 历史拉链表

第3章 Greenplum实战 从本章开始我们结合实际需求,阐述一下日常项目开发中如何结合Greenplum的特性进行高效的开发,展现出Greenplum在海量数据分析中的优势. 本章将介绍两个完整的例子:数据仓库拉链记历史和网页浏览日志分析.在这两个例子中,会结合Greenplum的一些特性加以描述,之后会介绍使用Greenplum中要注意的一些特性,以及这些特性对性能的影响. 3.1 历史拉链表 数据仓库是一个面向主题的.集成的.相对稳定的.反映历史变化的数据集合,用于支持管理决策.由于需要

《Greenplum企业应用实战》一导读

前 言 为什么写作本书 阿里巴巴是国内最早使用Greenplum作为数据仓库计算中心的公司.从2009年到2012年Greenplum都是阿里巴巴B2B最重要的数据计算中心,它替换掉了之前的Oracle RAC,有非常多的优点. Greenplum的性能在数据量为TB级别时表现非常优秀,单机性能相比Hadoop要快好几倍. Greenplum是基于PostgreSQL的一个完善的数据库,在功能和语法上都要比Hadoop上的SQL引擎Hive好用很多,对于普通用户来说更加容易上手. Greenpl

《Greenplum企业应用实战》一1.4 Greenplum特性及应用场景

1.4 Greenplum特性及应用场景 1.4.1 Greenplum特性 (1)支持海量数据存储和处理当今是个数据迅速增长的时代,数据量从过去的MB到GB,再到TB增长到现在的PB级规模,传统的OLTP数据库在TB级别以上的数据管理中已经捉襟见肘.Greenplum使用MPP架构,同时使用多台机器并行计算,极大地提高了对海量数据的处理能力.采取MPP架构的数据库系统才能对海量数据进行管理.(2)高性价比Greenplum数据库可以搭建在业界各种开放式硬件平台上,在硬件选型上有很强的自由性.相

《Greenplum企业应用实战》一第1章 Greenplum简介1.1 Greenplum的起源和发展历程

第1章 Greenplum简介 本章先介绍Greenplum的产生背景.特性及应用场景.与PostgreSQL关系,以及发展历程. 1.1 Greenplum的起源和发展历程 短短十多年,互联网在中国经历了从门户网站.搜索.即时通信.游戏娱乐.垂直细分--到电子商务.Web 2.0,再到社会化网络.移动互联网的一系列进化和变革.无论是互联网还是移动互联网,都是由海量的数据构成.对海量数据分析的需求开始突破传统边界,不再局限于电信.移动.金融.保险.制造等传统企业,涌现出大批将海量.庞杂的数据转化

《Greenplum企业应用实战》一2.3 畅游Greenplum

2.3 畅游Greenplum 本节只介绍一些常用的命令,重点是Greenplum特有的一些命令,而对于一般数据库都具备的特性及SQL标准语法,本节提到的比较少,因此要求读者在阅读本节具备一定的SQL基础. 2.3.1 如何访问Greenplum psql psql是Greenplum/PostgreSQL默认的客户端,前面初始化数据库的时候已经使用过了,下面介绍一些详细的用法. ```javascript [gpadmin@dw-greenplum-1 ~]$ psql --help This

《Greenplum企业应用实战》一1.3 PostgreSQL与Greenplum的关系

1.3 PostgreSQL与Greenplum的关系 1.3.1 PostgreSQL PostgreSQL是一种非常先进的对象–关系型数据库管理系统(ORDBMS),是目前功能最强大,特性最丰富和技术最先进的自由软件数据库系统之一,其某些特性甚至连商业数据库都不具备.这个起源于伯克利(BSD)的数据库研究计划目前已经衍生成一项国际开发项目,并且有非常广泛的用户. PostgreSQL的特点可以说是数不胜数,称其为最先进的开源软件数据库当之无愧,支持绝大部分的主流数据库特性,主要体现在如下几方

《Greenplum企业应用实战》一2.2 安装Greenplum的常见问题

2.2 安装Greenplum的常见问题 安装Greenplum最常见的错误就是环境变量设置错误,网卡配置错误,或者是每个Segment的通道或网络没有打通. 如果子节点的操作系统环境不一样,也可能会导致各种各样的错误.所以在搭建环境的时候,要求每一台机器的配置基本一样,方便以后管理与维护,避免一些奇怪的问题.下面将介绍几个常见的报错及处理方法. 2.2.1 /etc/hosts配置错误 现在来看一个奇怪的报错SQL,查询一张普通表时报如下错误,但是查询数据字典又不报错: testDB=# se

《Greenplum企业应用实战》一1.5 小结

1.5 小结 本章非常简短地介绍了Greenplum产生的背景,并分别对比OLTP与OLAP.PostgreSQL和Greenplum,另外简要介绍了Greenplum的特性.应用场景及发展历程,相信通过这一章能让读者在总体上对Greenplum有所认识.

《Greenplum企业应用实战》一3.3 数据分布

3.3 数据分布 由于Greenplum是分布式的架构,为了充分体现分布式架构的优势,我们有必要了解数据是如何分散在各个数据节点上的,有必要了解数据倾斜对数据加载.数据分析.数据导出的影响. 3.3.1 数据分散情况查看 我们来简单做个测试,首先,利用generate_series和repeat函数生成一些测试数据,代码如下: create table test_distribute_1 as select a as id ,round(random()) as flag , repeat('a