Druid 分析报表中的实战(二)
今天介绍一下druid常用查询类型的TopN和GroupBy。
实践服务器配置:
CPU:24核+SSD 1.4T Flush卡*2+内存256G+千兆网卡 * 15台
数据量:4亿+/天,连续100天数据,数据总量400亿+-
一、数据分类:
Timestamp | 将时间相近的一些数据聚合在一起,查询的时候指定时间范围,底层使用绝对毫秒数保存的时间戳,默认使用ISO-8601格式展示时间,格式:YYYY-MM-DDTHH:MM:SSSZ,“Z“代表零时区,中国所在的东八区为:“+08:00” |
Dimensions | 与OLAP中的维度是一样的,一条记录中的字符型数据可看做是维度列,维度列被用于过滤筛选数据,分组数据等,标识一些统计的维度,比如:名称、类别等 |
Metrics | 质量列被用于聚合和计算的列,比如:访问总数、合计金额等 |
二、查询介绍:
Timeseries |
按照指定日期时间段查询规则返回聚合合的结果集,查询规则中可以设置查询粒度、维度,过滤条件和排序方式,并且支持后聚合。返回一个JSON对象数组。 |
TopN | 适用于单维度查询,通过给定规则和指标维度返回一个结果集,TopN查询可看做是给定排序规则,返回单一维度的Group By查询,比实际Group By查询查询快很多,Metic属性是TopN专属的指标排序列。 |
GroupBy | 适用于多维度查询,使用方面是最灵活也最耗性能。 |
从性能上来讲Timeseries和TopN查询性能优于GroupBy。
三、参数解释:
aggregation | 对应“SELECT X,Y FROM”,要查询的某些列 |
dimensions | 对应“GROUP BY X,Y”,基于哪些列分组 |
filter | 对应“WHERE X=1 AND|OR Y=2”,过滤条件 |
granularity |
数据聚合的粒度 |
四、TopN案例:
1、案例需求:
- 用户名:“Jack”
- 维度:“City”
- 日期范围:2020-03-01至2020-03-31
- 按“rechange”排序取前三条记录
- SQL表达:
SELECT SUM(rechange) AS rechange, city, user_name
FROM user_rechange_recode
WHEREdt>='2020-03-01' AND dt<='2020-03-31' AND user_name='Jack'
GROUP BY city
ORDER BY recange DESC
LIMIT 3
2、查询请求:
{"queryType": "topN","dataSource": "user_recharge_record","granularity": "all","filter": {"type": "and","fields": [{"type": "selector","dimension": "user_name","value": "Jack"}]},"dimension": "city","threshold": "3", //返回的TOP行数"metric": "rechange","aggregations": [{"name": "recharge","type": "doubleSum","fieldName": "recharge"}],"intervals": "2020-03-01/2020-04-01","context": {"timeout": 28000}
}
3、返回结果:
[{"timestamp": "2020-02-29T16:00:00.000Z","result": [{"recharge": 661.61,"city": "北京"},{"recharge": 503.48,"city": "上海"},{"recharge": 362.59,"city": "广州"}]}
]
4、响应时间:
Time:60ms+-
五、GroupBy案例:
1、案例需求:
- 用户名:“Jom”
- 维度:“City”,“UserName”
- 日期范围:2020-03-01至2020-03-31
- 按“rechange”排序取前三条记录
- SQL表达:
SELECT user_name, city, level, SUM(recharge) AS recharge
FROMuser_recharge_record
WHEREdt>='2020-01-01' AND dt<='2020-03-31' AND user_name='Jom' AND level in(...)
GROUP BYuser_name, city, level
ORDER BYrecharge DESC
LIMIT 3
2、查询请求:
{"dataSource": "user_recharge_record", // 数据源"queryType": "groupBy", // 查询类型"granularity": "all", // 所有"intervals": "2020-01-01/2020-04-01", // 查询区间"filter": { // 条件类似SQL:select ... WHERE user_name='Jom' AND level in ("...")"type": "and","fields": [{"type": "selector","dimension": "user_name","value": "Jom"},{"type": "in","dimension": "level","values": ["工程师", "项目经理", "研发主管"]}]},"limitSpec": {"type": "default","limit": 3},"context": {"timeout": 28000},"dimensions": ["user_name", "city", "level"],// 类似 SELECT user_name, city, level FROM ..."aggregations": [{"name": "recharge", "type": "doubleSum","fieldName": "recharge"}]
}
3、返回返回:
[{"version": "v1","timestamp": "2020-01-01T00:00:00.000+08:00","event": {"city": "jingdong","level": "天津","user_name": "Jom","rechange": 14563.0}},{"version": "v1","timestamp": "2020-01-01T00:00:00.000+08:00","event": {"city": "上海","level": "工程师","user_name": "Jom","rechange": 6799.0}},{"version": "v1","timestamp": "2020-01-01T00:00:00.000+08:00","event": {"city": "北京","level": "研发主管","user_name": "Jom","views": 165.0}}
]
4、响应时间:
Time:800ms+-
结论:
如上实例均为50~800ms以内返回数据。
Timeseries、TopN查询速度最快,GroupBy多维度分析较慢。
Druid 分析报表中的实战(二)相关推荐
- Druid 分析报表中的实战(一)
产品又过来提需求了! 案例需求 需要按日汇总充值总数的数据. 过滤条件: 用户包括:"Tom"和"Jack" 所有城市:"北京"." ...
- 禅道报表中关闭bug统计图_想要简单制作数据可视化分析报表?这个工具绝对好用...
说到分析报表,行外小白都会觉得很简单,不就是整理数据到表格吗?但对于从事相关职业的同行来说,肯定多多少少会被报表困扰过.特别是对于一些高级的Excel报表,可是它需要复杂的函数,使用编程代码处理,上手 ...
- Python 爬虫实战:分析豆瓣中最新电影的影评
Python 爬虫实战:分析豆瓣中最新电影的影评 接触python时间不久,做些小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的 ...
- c语言期中项目实战二—简易扫雷,思路分析加代码详细注释
c语言期中项目实战二-简易扫雷,思路分析+代码详细注释 游戏介绍 项目步骤 模块化编程 设置菜单 设置棋盘 打印棋盘 布置雷 排查雷 总结及总代码和详细注释 游戏介绍 扫雷这个经典游戏,直到现在仍有很 ...
- python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc
利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...
- Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...
在Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据一)中,解释了如何把Crystal Report整合到Sharepoint ...
- 《Spark商业案例与性能调优实战100课》第15课:商业案例之纯粹通过DataSet进行电商交互式分析系统中各种类型TopN分析实战详解
<Spark商业案例与性能调优实战100课>第15课:商业案例之纯粹通过DataSet进行电商交互式分析系统中各种类型TopN分析实战详解
- 编译原理学习笔记(二十九)~习题:分析句子 id--id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系。
题目 分析句子 id–id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系. 语法如下: E → E - T (1) E → T (2) T → T * F (3) T → F(4 ...
- Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出
Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出 一:MS SQL Report Server 报表的制作. 1.打开Microsoft Visual Studio 20 ...
最新文章
- python神奇时钟项目_Python Tkinter 数字时钟小项目
- Elon Musk的OpenAI用VR训练机器人:解锁更多复杂动作!
- 实战SSM_O2O商铺_32【商品】商品编辑之Dao层的实现
- 一文读懂「Attention is All You Need」| 附代码实现
- 厉害了,自己手写一个Java热加载!
- win7窗口颜色没有透明的开启教程
- Android GridLayout 网格布局
- 关于点击锁(防止多次点击)
- 用gambit学博弈论---零和博弈
- RTSP/GB28181/SDK/EHOME协议视频智能分析共享平台EasyCVR安防视频云服务新增智能人脸识别功能
- 如何下载网页的FLASH视频
- 学了C语言想装x能干点啥?手把手教你写个聊天软件来玩玩
- 巴菲特致股东的一封信:1996年
- Win10如何高效压缩卷,亲测有效
- android短信分享,android 短信分享
- Anton and Letters
- 锐捷服务器无系统如何进pe,没有u盘怎么进入pe系统,网络启动进PE做系统教程...
- Javascript特效:点名册(随机点名)
- 计算机面试专业英语词汇,面试常用英语,英语面试常用词汇?
- C++的静态成员变量和静态成员函数
热门文章
- php用while循环做出1到10的乘积,PHP实现笛卡尔积算法的实例讲解
- linux 记事本程序,Linux记事本操作
- dev 报表设计器 怎么设置每页10行_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
- 工业机器人码垛教学实施_工业码垛机器人存在问题与解决对策
- mysql导入csvnull,MySQL Workbench从CSV导入NULL
- (八) shiro + spring + mybatis整合开发
- 探讨浏览器CSS选择器的权重!!!
- nginx开启core dump文件
- 《数据库SQL实战》查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t
- 一篇文章搞定面试中的二叉树题目(java实现)