今天介绍一下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 分析报表中的实战(二)相关推荐

  1. Druid 分析报表中的实战(一)

    产品又过来提需求了! 案例需求 需要按日汇总充值总数的数据. 过滤条件: 用户包括:"Tom"和"Jack" 所有城市:"北京"." ...

  2. 禅道报表中关闭bug统计图_想要简单制作数据可视化分析报表?这个工具绝对好用...

    说到分析报表,行外小白都会觉得很简单,不就是整理数据到表格吗?但对于从事相关职业的同行来说,肯定多多少少会被报表困扰过.特别是对于一些高级的Excel报表,可是它需要复杂的函数,使用编程代码处理,上手 ...

  3. Python 爬虫实战:分析豆瓣中最新电影的影评

    Python 爬虫实战:分析豆瓣中最新电影的影评 接触python时间不久,做些小项目来练练手.前几天看了<战狼2>,发现它在最新上映的电影里面是排行第一的,如下图所示.准备把豆瓣上对它的 ...

  4. c语言期中项目实战二—简易扫雷,思路分析加代码详细注释

    c语言期中项目实战二-简易扫雷,思路分析+代码详细注释 游戏介绍 项目步骤 模块化编程 设置菜单 设置棋盘 打印棋盘 布置雷 排查雷 总结及总代码和详细注释 游戏介绍 扫雷这个经典游戏,直到现在仍有很 ...

  5. python处理excel表格数据-利用Python处理和分析Excel表中数据实战.doc

    利用Python处理和分析Excel表中数据实战 [利用python进行数据分析--基础篇]利用Python处理和分析Excel表中数据实战 原创 2017年06月28日 15:09:32 标签: p ...

  6. Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据 二)...

    在Sharepoint学习笔记---如何在Sharepoint2010网站中整合Crystal Report水晶报表(显示数据一)中,解释了如何把Crystal Report整合到Sharepoint ...

  7. 《Spark商业案例与性能调优实战100课》第15课:商业案例之纯粹通过DataSet进行电商交互式分析系统中各种类型TopN分析实战详解

    <Spark商业案例与性能调优实战100课>第15课:商业案例之纯粹通过DataSet进行电商交互式分析系统中各种类型TopN分析实战详解

  8. 编译原理学习笔记(二十九)~习题:分析句子 id--id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系。

    题目 分析句子 id–id*id的 最右推导过程,画出分析树,找出和分析过程中每一步的对应关系. 语法如下: E → E - T (1) E → T (2) T → T * F (3) T → F(4 ...

  9. Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出

    Sql Server 性能分析4 –数据库大小,数据库表大小综合性分析报表输出 一:MS SQL Report Server 报表的制作. 1.打开Microsoft Visual Studio 20 ...

最新文章

  1. python神奇时钟项目_Python Tkinter 数字时钟小项目
  2. Elon Musk的OpenAI用VR训练机器人:解锁更多复杂动作!
  3. 实战SSM_O2O商铺_32【商品】商品编辑之Dao层的实现
  4. 一文读懂「Attention is All You Need」| 附代码实现
  5. 厉害了,自己手写一个Java热加载!
  6. win7窗口颜色没有透明的开启教程
  7. Android GridLayout 网格布局
  8. 关于点击锁(防止多次点击)
  9. 用gambit学博弈论---零和博弈
  10. RTSP/GB28181/SDK/EHOME协议视频智能分析共享平台EasyCVR安防视频云服务新增智能人脸识别功能
  11. 如何下载网页的FLASH视频
  12. 学了C语言想装x能干点啥?手把手教你写个聊天软件来玩玩
  13. 巴菲特致股东的一封信:1996年
  14. Win10如何高效压缩卷,亲测有效
  15. android短信分享,android 短信分享
  16. Anton and Letters
  17. 锐捷服务器无系统如何进pe,没有u盘怎么进入pe系统,网络启动进PE做系统教程...
  18. Javascript特效:点名册(随机点名)
  19. 计算机面试专业英语词汇,面试常用英语,英语面试常用词汇?
  20. C++的静态成员变量和静态成员函数

热门文章

  1. php用while循环做出1到10的乘积,PHP实现笛卡尔积算法的实例讲解
  2. linux 记事本程序,Linux记事本操作
  3. dev 报表设计器 怎么设置每页10行_可嵌入您系统的.NET 报表控件ActiveReports:带状列表组件...
  4. 工业机器人码垛教学实施_工业码垛机器人存在问题与解决对策
  5. mysql导入csvnull,MySQL Workbench从CSV导入NULL
  6. (八) shiro + spring + mybatis整合开发
  7. 探讨浏览器CSS选择器的权重!!!
  8. nginx开启core dump文件
  9. 《数据库SQL实战》查找薪水涨幅超过15次的员工号emp_no以及其对应的涨幅次数t
  10. 一篇文章搞定面试中的二叉树题目(java实现)