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

简介:

本节书摘来自华章出版社《Greenplum企业应用实战》一书中的第3章,第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所示。

image

  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)
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7月前
|
存储 SQL 关系型数据库
AnalyticDB PostgreSQL构建一站式实时数仓实践
本文介绍通过 AnalyticDB PostgreSQL 版基于实时物化视图,构建流批一体的一站式实时数仓解决方案,实现一套系统、一份数据、一次写入,即可在数仓内完成实时数据源头导入到实时分析全流程。
1885 5
AnalyticDB PostgreSQL构建一站式实时数仓实践
|
11月前
|
存储 Oracle 架构师
「集成架构」Talend ETL 性能调优宝典
「集成架构」Talend ETL 性能调优宝典
|
11月前
|
SQL 运维 监控
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版功能演示(上)——七、常用运维SQL
《阿里云认证的解析与实战-数据仓库ACP认证》——云原生数据仓库AnalyticDB PostgreSQL版功能演示(上)——七、常用运维SQL
|
存储 SQL 自然语言处理
【实操系列】如何通过云原生数据仓库实现“一站式全文检索”业务
随着数字时代的发展,数据的来源和生成方式越来越广泛,其中也包含大量的文本数据。我们通常选择使用数据库/数据仓库存储这些数据,但是将其中的文本数据中有价值的信息提取出来并进行高效分析,往往需要涉及多个数据处理系统配合来实现,用户的使用门槛通常较高、维护成本较大。 本文从阿里云用户使用云原生数据仓库AnalyticDB PostgreSQL版(以下简称ADB PG)的实际体验出发,介绍ADB PG如何实现“一站式全文检索”业务,并详细阐述ADB PG使用的优势技术,最后提供对应业务案例分析。
【实操系列】如何通过云原生数据仓库实现“一站式全文检索”业务
|
存储 运维 Cloud Native
【实操系列】基于AnalyticDB PostgreSQL数据共享实现企业级跨多业务的敏捷分析
云数据仓库AnalyticDB PostgreSQL 版发布了最新自研的云原生架构实例,实现了跨实例间的数据共享能力。允许进行跨实例间的实时数据共享且无需进行数据迁移,可支持构建安全、高效、灵活的数据分析场景。本文介绍了依托数据共享实现云数仓跨多业务实例的敏捷数据分析方案;
【实操系列】基于AnalyticDB PostgreSQL数据共享实现企业级跨多业务的敏捷分析
|
SQL JSON 监控
Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)
Sentry 监控 - Snuba 数据中台架构(SnQL 查询语言简介)
151 0
|
存储 弹性计算 关系型数据库
【选型指导】从头构建数据分析,如何做好AnalyticDB PostgreSQL的产品选型
ADBPG的产品线比较丰富,很多同学都想知道应该如何选择最适合自己的产品。本文从用户的数据链路视角切入,带大家快速基于现有的数据体系,构建ADBPG的数据仓库服务;
【选型指导】从头构建数据分析,如何做好AnalyticDB PostgreSQL的产品选型
|
SQL 存储 NoSQL
Greenplum应用最佳实践
Greenplum分布式分析数据库 通用操作的最佳实践。持续更新
1266 0
Greenplum应用最佳实践
|
SQL 分布式计算 大数据
9.29直播预告|数据湖分析DLA之Serverless SQL(兼容Presto)技术解析
本次分享将向您介绍DLA SQL基于Presto引擎做的一系列优化比如多Coordinator、租户隔离、Coonector方面的优化细节,以及为何DLA SQL比您自建Presto性价比更高的奥秘。
871 0
9.29直播预告|数据湖分析DLA之Serverless SQL(兼容Presto)技术解析
|
NoSQL 算法 固态存储
Cassandra 最佳实践系列(2) - 选型篇
Cassandra最佳实践之选型,选择什么样子的机器
2025 0