个人博客: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相关推荐

  1. 有关cookie实现统计pv,uv的一些用法

    最近跟研发配合做了一个在登录,注册等相关页面统计用户ip来源.uv.pv.主要是根据当前的url,获取相关的参数,设置cookie值,然后根据页面输出的相关数据跟cookie相关的匹配,进行操作,当用 ...

  2. PHP网站流量统计--[pv,uv,ip及$_SERVER]说明

    一.PV.UV.IP的英文解释 PV(page view):页面访问量,每刷新一次就被记一次PV. UV(Unqie Vistor):独立访客,访问您网站的一台电脑客户端为一个访客.24小时之内,同一 ...

  3. spark sql uv_使用Spark Streaming SQL进行PV/UV统计

    作者:关文选,花名云魄,阿里云E-MapReduce 高级开发工程师,专注于流式计算,Spark Contributor 1.背景介绍 PV/UV统计是流式分析一个常见的场景.通过PV可以对访问的网站 ...

  4. spark sql uv_使用Spark Streaming SQL进行PV/UV统计-阿里云开发者社区

    作者:关文选,花名云魄,阿里云E-MapReduce 高级开发工程师,专注于流式计算,Spark Contributor 1.背景介绍 PV/UV统计是流式分析一个常见的场景.通过PV可以对访问的网站 ...

  5. java pv uv_前端数据收集(pv/uv)

    所谓web,即使你我素未谋面,便知志趣相投:足不出户,亦知世界大. 01 - 什么是PV/UV 网站流量分析,是指在获得网站访问量基本数据的情况下对有关数据进行统计.分析,从中发现用户访问网站的规律, ...

  6. JavaSpark | RDD实战:统计网站 pv 和 uv

    文章目录 1.pv 和 uv 1.1 什么是 PV 值? 1.2 什么是 UV 值? 2. 代码实战 JavaSpark | 算子 JavaSpark | RDD实战:WordCount JavaSp ...

  7. 实现pv uv统计_程序员修仙之路优雅快速的统计千万级别uv

    菜菜,咱们网站现在有多少PV和UV了? Y总,咱们没有统计pv和uv的系统,预估大约有一千万uv吧 写一个统计uv和pv的系统吧 网上有现成的,直接接入一个不行吗? 别人的不太放心,毕竟自己写的,自己 ...

  8. 实现pv uv统计_聊聊前端监控(二)--行为监控的技术实现

    上一篇梳理了前端监控的主要场景和类型,从本文开始,讨论下我知道的一些技术实现.前端黑科技层出不穷,个人眼界有限,尽量把了解到的实现方式都罗列出来,希望对大家有些启发,同时也欢迎流言讨论. 限于篇幅,按 ...

  9. 有关“数据统计”的一些概念 -- PV UV VV IP跳出率等

    有关"数据统计"的一些概念 -- PV UV VV IP跳出率等 1. 什么是展现量.点击量.点击率 在百度推广后台可以看到消费.平均价格.点击.展现.点击率.千次展现费用等数据, ...

最新文章

  1. MySQL数据库备份和还原的常用命令
  2. 【转】函数调用时堆栈变化
  3. Android quot;QR二维码扫描quot;
  4. FreeSql (三十一)分区分表
  5. arcmap常见错误及常用操作(待补充)
  6. 使用shiro框架的项目增加忘记密码功能遇到的一些问题
  7. 已知树的前序遍历和中序遍历,求后序遍历的方法(转)
  8. matlab官方中文文档教程
  9. 浏览器首页被360恶意篡改,解决方法
  10. WIFI WDS不同应用模式简介
  11. ps3自建服务器,PS3新手图文教程之网络设置
  12. 【HTML 教程系列第 9 篇】什么是 HTML 中的换行标签 br
  13. go : go-redis 基础操作
  14. Java实现 LeetCode 506 相对名次
  15. Python实现圆通快递单号查询官方接口教程
  16. Iphone开发用导航控制器实现视图的分层切换(UINavigationController)
  17. 查看yum安装软件的目录
  18. 人工智能产业链,是时候梳理一下了!
  19. 防沉迷与身份证系统挂钩 网游要实名认证
  20. MVVM理解 ——(2)数据劫持

热门文章

  1. 关于 detach()和detach_()的区别
  2. Android9.0 Charles 模拟器抓包
  3. MySQL双主架构介绍
  4. 密码管理工具KeePass 2.52 正式发布!
  5. 从PaaS平台到技术中台,BoCloud博云直指“数字中国的架构师”
  6. 谷歌浏览器怎么管理收藏夹 收藏夹分类整理步骤
  7. IK分词器扩展词典、停用词典、同义词典
  8. 保险IT业从核心系统开发向服务转型
  9. 【异构图笔记,篇章3】GATNE论文阅读笔记与理解:General Attributed Multiplex HeTerogeneous Network Embedding
  10. 秘密的文件夹加密软件-超级秘密文件夹