clickhouse的windowFunnel(漏斗)
1、WindowFunnel
关于官网的解释:
Returned value:Integer. The maximum number of consecutive triggered conditions from the chain within the sliding time window. All the chains in the selection are analyzed.
返回值:int类型。返回满足在指定滑动窗口内的连续触发条件的最大值。所有被选择的条件链都会被分析(这句翻译的不准确,主要看前面一句翻译即可)
具体实例分析:
建如下一张表,
CREATE TABLE funnel.funnel_test ( uid String, eventid String, eventTime UInt64) ENGINE = MergeTree PARTITION BY (uid, eventTime) ORDER BY (uid, eventTime) SETTINGS index_granularity = 8192
有三个字段:
uid:用户id
eventid:事件id
eventTime:事件发生时间(秒)
插入如下数据作为测试数据:
uid1 event1 1551398404
uid1 event2 1551398406
uid1 event3 1551398408
uid2 event2 1551398412
uid2 event3 1551398415
uid3 event3 1551398410
uid3 event4 1551398413
1.
select uid,windowFunnel(4)(toDateTime(eventTime),eventid = 'event2',eventid = 'event3') as funnel from funnel_test group by uid;
当我们设置的滑动窗口为4秒,条件链为event2->event3时,上述查询得到的结果为:
uid funnel
uid1 2
uid2 2
uid3 0
下面我们看看他是怎么得到这个结果的,首先将所有的数据根据uid聚合和排序(排序是windowFunnel里自己实现的),得到:
uid1: (event1,1551398404) -> (event2,1551398406) -> (event3,1551398408)
uid2: (event2,1551398412) -> (event3,1551398415)
uid3: (event3 ,1551398410) -> (event4,1551398413)
由上述聚合和排序之后的条件链中,只有uid1和uid2有event2->event3的条件链,且时间差分别为2(1551398408-1551398406) 和 3(1551398415-1551398412),小于滑动窗口4,所以满足条件,故uid1和uid2的结果都为2(event2,event3),而uid3为0(没有满足条件的条件链)
2、 如果滑动窗口改为2
select uid,windowFunnel(2)(toDateTime(eventTime),eventid = 'event2',eventid = 'event3') as funnel from funnel_test group by uid;
则由上述得到的条件链知道,结果为
uid funnel
uid1 2
uid2 1
uid3 0
为什么uid2变成了1,因为uid2的条件链中的event3和event2的时间差是3,大于了滑动窗口时间2,所以只有第一个条件event2满足查询,故结果为1
3、 如果滑动窗口为4,条件链改为event3,event4,
select uid,windowFunnel(4)(toDateTime(eventTime),eventid = 'event3',eventid = 'event4') as funnel from funnel_test group by uid;
则查询结果为
uid funnel
uid1 1
uid2 1
uid3 2
因为uid1和uid2只有事件event3,没有事件event4.
而uid3既有event3,也有event4,且两个事件的时间差小于滑动窗口4,故uid3的结果为2
clickhouse的windowFunnel(漏斗)的更多相关文章
- HDFS+ClickHouse+Spark:从0到1实现一款轻量级大数据分析系统
在产品精细化运营时代,经常会遇到产品增长问题:比如指标涨跌原因分析.版本迭代效果分析.运营活动效果分析等.这一类分析问题高频且具有较高时效性要求,然而在人力资源紧张情况,传统的数据分析模式难以满足.本 ...
- 【Highcharts】 绘制饼图和漏斗图
1.outModel类设计 设计outModel类首先研究下Highcharts中series的data数据格式,发现饼图和漏斗图都可以使用这样格式的数据 series: [{ name: 'Uniq ...
- ClickHouse 快速入门
ClickHouse 是什么 ClickHouse 是一个开源的面向联机分析处理(OLAP, On-Line Analytical Processing) 的列式存储数据库管理系统. 在一个 &quo ...
- 彪悍开源的分析数据库-ClickHouse
https://zhuanlan.zhihu.com/p/22165241 今天介绍一个来自俄罗斯的凶猛彪悍的分析数据库:ClickHouse,它是今年6月开源,俄语社区为主,好酒不怕巷子深. 本文内 ...
- 使用容器编排工具docker swarm安装clickhouse多机集群
1.首先需要安装docker最新版,docker 目前自带swarm容器编排工具 2.选中一台机器作为master,执行命令sudo docker swarm init [options] 3,再需 ...
- clickhouse的使用和技巧,仅个人
centos 安装clickhouse curl -s https://packagecloud.io/install/repositories/altinity/clickhouse/script. ...
- clickhouse修改时区
clickhouse时区设置 sudo vim /etc/clickhouse-server/config.xml <timezone>Asia/Shanghai</timezone ...
- Clickhouse v18编译记录
简介 ClickHouse是"战斗民族"俄罗斯搜索巨头Yandex公司开源的一个极具"战斗力"的实时数据分析数据库,是面向 OLAP 的分布式列式DBMS,圈内 ...
- clickhouse在Linux上的安装部署
$ sudo apt-get install clustershell #输入你的管理员密码 $ cd /etc/clustershell $ sudo gedit groups #在文件中添加如下内 ...
随机推荐
- 关于Feign的Fallback处理
Feign的不恰当的fallback Feign的坑不少,特别与Hystrix集成之后. 在微服务引入Feign后,上线不久后便发现,对于一个简单的查询类调用,在下游返回正常的"404-资源 ...
- php-高级计算器
HTML代码: <!doctype html><html lang="en"><head> <meta charset="UTF ...
- IDEA连接数据库出现报错
解决办法 jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&useJDBCComplia ...
- 跨域解决之JSONP和CORS的详细介绍
JSONP跨域和CORS跨域 什么是跨域? 跨域:指的是浏览器不能执行其它网站的脚本,它是由浏览器的同源策略造成的,是浏览器的安全限制! 同源策略 同源策略:域名.协议.端口均相同. 浏览器执行Jav ...
- ESP32省电模式连接WIFI笔记
基于ESP-IDF4.1版本 main.c文件如下: #include <string.h> #include "freertos/FreeRTOS.h" #inclu ...
- C语言:赋值流程图
- PYD应用方法
1. 'ImportError: No module named xxx' 可能是xxx.pyd所在路径不在sys.path中. 解决方法:import之前用sys.path.append()方法加入 ...
- Java学习之注解篇
Java学习之注解篇 0x00 前言 续上篇文章,这篇文章就来写一下注解的相关内容. 0x01 注解概述 Java注解(Annotation)又称Java标注,是JDK5.0约会的一种注释机制. 和J ...
- Win10离线安装.net3.5
起因 工作原因需要安装vs2008,但是依赖.net3.5,寻找可以离线安装的版本 尝试 下载.net framework sp1完整包 dotnetfx35.exe 可选下载 语言包 dotnetf ...
- Easyui设置easyui-textbox不可编辑
转载自:https://blog.csdn.net/qq_23113521/article/details/78801689 在easyui里由于easyui-textbox被封装,通过一般的jque ...