ClickHouse 实战整理 - 统计 pv uv
个人博客:DoubleFJ の Blog
ClickHouse 官方文档
文中举例均为简单示例,根据业务自行扩展。
实际业务场景中很多会需要统计 pv uv 值,比如页面的 pv uv 值,商品、店铺的 pv uv 值……
这边举一个简单的例子,比如说统计商品访问的 pv uv:
- 简单的源数据表创建如下:
CREATE TABLE IF NOT EXISTS test.product_operation
(ts_date_time DateTime COMMENT '事件触发时间',gen_date_time DateTime COMMENT '入库时间',product_id UInt64 COMMENT '商品ID',user_id UInt64 COMMENT '用户ID',operation UInt16 COMMENT '商品操作类型(1:访问,2:购买,3:收藏)'
) ENGINE = MergeTree()ORDER BY (toDate(ts_date_time), operation);
像这种数据量可能很大,又需要预先聚合计算以减小获取耗时的,我们添加 物化视图 来帮助我们做这个事。
- 创建按天聚合数据的物化视图:
CREATE MATERIALIZED VIEW IF NOT EXISTS test.product_operation_day_pv_uv_mvENGINE = AggregatingMergeTree()ORDER BY (ts_date, product_id, operation)
AS
SELECT toDate(ts_date_time) as ts_date,product_id,operation,sumState(1) as pv,uniqState(user_id, ts_date) as uv
FROM test.product_operation
GROUP BY ts_date, product_id, operation;
- 创建总的聚合数据的物化视图:
CREATE MATERIALIZED VIEW IF NOT EXISTS test.product_operation_total_pv_uv_mvENGINE = AggregatingMergeTree()ORDER BY (product_id, operation)
AS
SELECT product_id,operation,sumState(1) as pv,uniqState(user_id) as uv
FROM test.product_operation
GROUP BY product_id, operation;
- 现在我们往源数据表中插入一条数据:
INSERT INTO test.product_operation(ts_date_time, gen_date_time, product_id, user_id, operation)
VALUES (toDateTime('2022-01-26 10:10:10'), now(), 1, 1, 1)
- 再查询:
忽略时区问题导致的时间显示
SELECT * FROM test.product_operation ORDER BY gen_date_time DESC;
ts_date_time | gen_date_time | product_id | user_id | operation |
---|---|---|---|---|
2022-01-26 02:10:10 | 2022-01-26 03:54:36 | 1 | 1 | 1 |
- 查询视图(day):
SELECT ts_date, product_id, operation, sumMerge(pv) AS pv, uniqMerge(uv) AS uv
FROM test.product_operation_day_pv_uv_mv GROUP BY ts_date, product_id, operation;
ts_date | product_id | operation | pv | uv |
---|---|---|---|---|
2022-01-26 | 1 | 1 | 1 | 1 |
- 查询视图(total):
SELECT product_id, operation, sumMerge(pv) AS pv, uniqMerge(uv) AS uv
FROM test.product_operation_total_pv_uv_mv GROUP BY product_id, operation;
product_id | operation | pv | uv |
---|---|---|---|
1 | 1 | 1 | 1 |
- 再往源数据插入数据:
INSERT INTO test.product_operation(ts_date_time, gen_date_time, product_id, user_id, operation)
VALUES (toDateTime('2022-01-26 23:10:10'), now(), 1, 1, 1);
- 查询视图:
ts_date | product_id | operation | pv | uv |
---|---|---|---|---|
2022-01-26 | 1 | 1 | 2 | 1 |
product_id | operation | pv | uv |
---|---|---|---|
1 | 1 | 2 | 1 |
- 换个
user_id
插入数据:
INSERT INTO test.product_operation(ts_date_time, gen_date_time, product_id, user_id, operation)
VALUES (toDateTime('2022-01-26 23:20:10'), now(), 1, 2, 1);
- 查询视图:
ts_date | product_id | operation | pv | uv |
---|---|---|---|---|
2022-01-25 | 1 | 1 | 3 | 2 |
product_id | operation | pv | uv |
---|---|---|---|
1 | 1 | 3 | 2 |
- 再换个
ts_date_time
插入数据:
INSERT INTO test.product_operation(ts_date_time, gen_date_time, product_id, user_id, operation)
VALUES (toDateTime('2022-01-27 10:20:10'), now(), 1, 1, 1),(toDateTime('2022-01-27 11:20:10'), now(), 1, 2, 1);
- 查询视图:
ts_date | product_id | operation | pv | uv |
---|---|---|---|---|
2022-01-26 | 1 | 1 | 3 | 2 |
2022-01-27 | 1 | 1 | 2 | 2 |
product_id | operation | pv | uv |
---|---|---|---|
1 | 1 | 5 | 2 |
综上,实现不难,clickhouse 丰富的聚合函数可以节省很多操作。
还可以用 Kafka引擎 做数据的增量同步,结合视图。
ClickHouse 实战整理 - 统计 pv uv相关推荐
- 有关cookie实现统计pv,uv的一些用法
最近跟研发配合做了一个在登录,注册等相关页面统计用户ip来源.uv.pv.主要是根据当前的url,获取相关的参数,设置cookie值,然后根据页面输出的相关数据跟cookie相关的匹配,进行操作,当用 ...
- PHP网站流量统计--[pv,uv,ip及$_SERVER]说明
一.PV.UV.IP的英文解释 PV(page view):页面访问量,每刷新一次就被记一次PV. UV(Unqie Vistor):独立访客,访问您网站的一台电脑客户端为一个访客.24小时之内,同一 ...
- spark sql uv_使用Spark Streaming SQL进行PV/UV统计
作者:关文选,花名云魄,阿里云E-MapReduce 高级开发工程师,专注于流式计算,Spark Contributor 1.背景介绍 PV/UV统计是流式分析一个常见的场景.通过PV可以对访问的网站 ...
- spark sql uv_使用Spark Streaming SQL进行PV/UV统计-阿里云开发者社区
作者:关文选,花名云魄,阿里云E-MapReduce 高级开发工程师,专注于流式计算,Spark Contributor 1.背景介绍 PV/UV统计是流式分析一个常见的场景.通过PV可以对访问的网站 ...
- java pv uv_前端数据收集(pv/uv)
所谓web,即使你我素未谋面,便知志趣相投:足不出户,亦知世界大. 01 - 什么是PV/UV 网站流量分析,是指在获得网站访问量基本数据的情况下对有关数据进行统计.分析,从中发现用户访问网站的规律, ...
- JavaSpark | RDD实战:统计网站 pv 和 uv
文章目录 1.pv 和 uv 1.1 什么是 PV 值? 1.2 什么是 UV 值? 2. 代码实战 JavaSpark | 算子 JavaSpark | RDD实战:WordCount JavaSp ...
- 实现pv uv统计_程序员修仙之路优雅快速的统计千万级别uv
菜菜,咱们网站现在有多少PV和UV了? Y总,咱们没有统计pv和uv的系统,预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的,直接接入一个不行吗? 别人的不太放心,毕竟自己写的,自己 ...
- 实现pv uv统计_聊聊前端监控(二)--行为监控的技术实现
上一篇梳理了前端监控的主要场景和类型,从本文开始,讨论下我知道的一些技术实现.前端黑科技层出不穷,个人眼界有限,尽量把了解到的实现方式都罗列出来,希望对大家有些启发,同时也欢迎流言讨论. 限于篇幅,按 ...
- 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等
有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 1. 什么是展现量.点击量.点击率 在百度推广后台可以看到消费.平均价格.点击.展现.点击率.千次展现费用等数据, ...
最新文章
- MySQL数据库备份和还原的常用命令
- 【转】函数调用时堆栈变化
- Android quot;QR二维码扫描quot;
- FreeSql (三十一)分区分表
- arcmap常见错误及常用操作(待补充)
- 使用shiro框架的项目增加忘记密码功能遇到的一些问题
- 已知树的前序遍历和中序遍历,求后序遍历的方法(转)
- matlab官方中文文档教程
- 浏览器首页被360恶意篡改,解决方法
- WIFI WDS不同应用模式简介
- ps3自建服务器,PS3新手图文教程之网络设置
- 【HTML 教程系列第 9 篇】什么是 HTML 中的换行标签 br
- go : go-redis 基础操作
- Java实现 LeetCode 506 相对名次
- Python实现圆通快递单号查询官方接口教程
- Iphone开发用导航控制器实现视图的分层切换(UINavigationController)
- 查看yum安装软件的目录
- 人工智能产业链,是时候梳理一下了!
- 防沉迷与身份证系统挂钩 网游要实名认证
- MVVM理解 ——(2)数据劫持
热门文章
- 关于 detach()和detach_()的区别
- Android9.0 Charles 模拟器抓包
- MySQL双主架构介绍
- 密码管理工具KeePass 2.52 正式发布!
- 从PaaS平台到技术中台,BoCloud博云直指“数字中国的架构师”
- 谷歌浏览器怎么管理收藏夹 收藏夹分类整理步骤
- IK分词器扩展词典、停用词典、同义词典
- 保险IT业从核心系统开发向服务转型
- 【异构图笔记,篇章3】GATNE论文阅读笔记与理解:General Attributed Multiplex HeTerogeneous Network Embedding
- 秘密的文件夹加密软件-超级秘密文件夹