Druid的数据查询过程以及查询语法

Druid提供了HTTP REST风格的查询接口。用户对数据的查询通过HTTP请求发送到查询节点(Broker Node),然后查询节点转发至历史节点(Historical Node)或实时节点(Realtime Node)处理。

Druid包含多种查询类型,如对用户摄入Druid的数据进行TopN,Timeseries,GroupBy,Select,Search等方式的查询,也可以查询一个数据源的timeBoundary,segmentMetadata,dataSourceMetadata等。

查询过程如下

Druid提供了HTTP REST风格的查询接口。用户对数据的查询通过HTTP请求发送到查询节点(Broker Node),然后查询节点转发至历史节点(Historical Node)或实时节点(Realtime Node)处理。

Druid查询流程图

(1)查询请求首先进入查询节点,查询节点将与已知存在的Segment进行匹配查询。

(2)查询节点选择一组可以提供所需要的Segment的历史节点和实时节点,将查询请求分发到这些机器上。

(3)历史节点和实时节点都会进行查询处理,然后返回结果。

(4)查询节点将历史节点和实时节点返回的结果合并,返回给查询请求方

组件

在介绍具体的查询之前,先介绍各种查询都会用到的基本组件(Component),如Filter、Aggregator、Post-Aggregator、Query、Interval和Context等。每一种基本组件都包含更多的详细类型。

Filter

Filter,即过滤器,在查询语句中是一个JSON对象,用来对维度进行筛选,表示维度满足Filter的行是我们需要的数据,类似于SQL中的where子句。Filter包含如下类型。

  1. Selector Filter的功能类似于SQL中的where key=value。
  2. Regex Filter允许用户用正则表达式来筛选维度,任何标准的Java支持的正则表达式Druid都支持。
  3. Logical Expression Filter包含and、or和not三种过滤器。
  4. Search Filter通过字符串匹配过滤维度,支持多种匹配方式。
  5. In Filter“类似于SQL中的in:WHERE`outlaw`IN(‘Good’,‘Bad’,‘Ugly’)。
  6. Bound Filter比较过滤器,包含“大于”、“小于”和“等于”三种算子。
  7. JavaScript Filter如果上述Filter不能满足要求,Druid还可以通过自己写JavaScript Filter来过滤维度,但是只支持一个入参,就是Filter里指定的维度的值,返回true或false。

Aggregator

Aggregator,即聚合器,若在摄入阶段就指定,则会在roll up时就进行计算;当然,也可以在查询时指定。聚合器包含如下详细类型。

  1. Count Aggregator计算Druid的数据行数,而Count就是反映被聚合的数据的计数。
  2. Sum Aggregator第一类是longSum Aggregator,它负责64位有符号整型的求和。第二类是doubleSum Aggregator,它负责64位浮点数的求和。
  3. Min/Max Aggregator第一类是doubleMin Aggregator,它负责计算指定Metric的值和Double.POSITIVE_INFINITY的最小值。第二类是doubleMax Aggregator,它负责计算指定Metric的值和Double.NEGATIVE_INFINITY的最大值。第三类是longMin Aggregator,它负责计算指定Metric的值和Long.MAX_VALUE的最小值。第四类是longMax Aggregator它负责计算指定Metric的值和Long.MIN_VALUE的最大值。
  4. Cardinality Aggregator在查询时,Cardinality Aggregator使用HyperLogLog算法计算给定维度集合的基数。
  5. HyperUnique Aggregator使用HyperLogLog算法计算指定维度的基数。
  6. Filtered Aggregator可以在aggregation中指定Filter规则。只对满足规则的维度进行聚合,以提升聚合效率。
  7. JavaScript Aggregator如果上述聚合器无法满足需求,Druid还提供了JavaScript Aggregator。用户可以自己写JavaScript function,其中指定的列即为function的入参。但是JavaScript Aggregator的执行性能要比本地Java Aggregator慢很多。因此,如果要追求性能,就需要自己实现本地Java Aggregator。

Post-Aggregator

Post-Aggregator可以对Aggregator的结果进行二次加工并输出。最终的输出既包含Aggregation的结果,也包含Post-Aggregator的结果。如果使用Post-Aggregator,则必须包含Aggregator。Post-Aggregator包含如下类型。

  1. Arithmetic Post-Aggregator支持对Aggregator的结果和其他Arithmetic Post-Aggregator的结果进行加“+”、减“-”、乘“*”、除“/”和“quotient”计算。需要注意的是:对于“/”,如果分母为0,则返回0。“quotient”不判断分母是否为0。当Arithmetic Post-Aggregator的结果参与排序时,默认使用float类型。用户可以手动通过ordering字段指定排序方式。
  2. Field Accessor Post-Aggregator返回指定的Aggregator的值,在Post-Aggregator中大部分情况下使用fieldAccess来访问Aggregator。在fieldName中指定Aggregator里定义的name,如果对HyperUnique的结果进行访问,则需要使用hyperUniqueCardinality。
  3. Constant Post-Aggregator会返回一个常数,比如100。可以将Aggregator返回的结果转换为百分比。
  4. HyperUnique Cardinality Post-Aggregator得到HyperUnique Aggretor的结果,使之能参与到Post-Aggregator的计算中。

Search Query

Search Query在Filter的search和search查询中都会用到。Search Query定义了如下几种字符串匹配方式。

  1. contains如果指定的维度的值包含给定的字符串,则匹配。contains可以通过case_sensitive指定是否区分大小写。
  2. insensitive_contains如果指定的维度的值包含给定的字符串,则匹配。不区分大小写,没有case_sensitive字段。如果contains中的case_sensitive设置为false,则和insensitive_contains等价。

Interval

在查询中指定时间区间。Interval中的时间是ISO-8601格式。对于中国用户,所在时区为东8区,因此需要在时间中加入“+08:00”。查询时间格式为:

"intervals" : ["2016-08-28T00:00:00+08:00/2016-08-29T00:00:00+08:00"]

需要注意的是,这里intervals的时间区间为前闭后开:starttime<=datetime

Context

Context可以在查询中指定一些参数。Context并不是查询的必选项,因此在查询中不指定Context时,则会使用Context中的默认参数。Context支持的字段如下:

Timeseries

对于需要统计一段时间内的汇总数据,或者是指定时间粒度的汇总数据,Druid通过Timeseries来完成。例如,对指定客户id和host,统计一段时间内的访问次数、访客数、新访客数、点击按钮数、新访客比率与点击按钮比率。

TopN

TopN是非常常见的查询类型,返回指定维度和排序字段的有序top-n序列。TopN支持返回前$N$条记录,并支持指定Metric为排序依据。例如,对指定广告主id=2852199100和指定host=www.mejia.wang,以及来自PC或手机访问,希望获取访客数最高的3个ad_source,以及每个ad_source对应的访问次数、访客数、新访客数、点击按钮数、新访客比率、点击按钮比率、ad_campaign与ad_media的组合个数:

上述查询JSON基本上包含了TopN查询中能用到的所有特性。

filter:过滤指定的条件。支持“and”,“or”,“not”,“in”,“regex”,“search”,“bound”。

aggregations:聚合器。用到的聚合函数和字段需要在metricsSpec中定义。HyperUnique采用HyperLogLog近似对指定字段求基数,这里用来算出各种行为的访客数。cardinality用来计算指定维度的基数,它与HyperUnique不同的是支持多个维度,但是性能比HyperUnique差。

postAggregations:对aggregations的结果进行二次加工,支持加、减、乘、除等运算。

metric:TopN专属,指定排序依据。

GroupBy

GroupBy类似于SQL中的group by操作,能对指定的多个维度进行分组,也支持对指定的维度进行排序,并输出limit行数。同时,支持having操作。GroupBy与TopN相比,可以指定更多的维度,但性能比TopN要差很多。如果是对时间范围进行聚合,输出各个时间的统计数据,类似于group by hour之类的操作,通常应该使用Timeseries。如果是对单个维度进行group by,则应尽量使用TopN。这两者的性能比GroupBy要好很多,在Druid 0.9.2版本中,对GroupBy有一个优化,可以通过在Context中指定使用新的算法。GroupBy支持limit,在limitSpec中按照指定Metric排序,不过不支持offset。

Select

Select类似于SQL中的select操作,Select用来查看Druid中存储的数据,并支持按照指定过滤器和时间段查看指定维度和Metric。能通过descending字段指定排序顺序,并支持分页拉取,但不支持aggregations和postAggregations。

Search

Search查询返回匹配中的维度,类似于SQL中的like操作,但是支持更多的匹配操作。

元数据查询

Druid支持对DataSource的基础元数据进行查询。可以通过timeBoundary查询DataSource的最早和最晚的时间点;通过segmentMetadata查询Segment的元信息,如有哪些column、metric、aggregator和查询粒度等信息;通过dataSourceMetadata查询DataSource的最近一次摄入数据的时间戳。

小结

Druid提供的查询方式非常丰富,几乎涵盖了OLAP查询的方方面面,并且很多查询语句与SQL几乎一致,同时还支持开发者编写自己的聚合器。这些丰富的功能使得用户可以轻松、灵活地在Druid平台上进行数据探索。

大数据druid查询不支持分页_Druid实时大数据分析查询(六)相关推荐

  1. 大数据druid查询不支持分页_Klin、Druid、ClickHouse核心技术对比

    点击上方蓝色字体,选择"设为星标" 回复"资源"获取更多资源 大数据技术与架构点击右侧关注,大数据开发领域最强公众号! 大数据真好玩点击右侧关注,大数据真好玩! ...

  2. easyexcel导出excel,大数据量100万以内分页查询zip格式导出

    easyexcel导出excel,大数据量100万以内分页查询zip格式导出 准备工作 整体思路 controller层 service层 mapper层 VO 表结构 测试 备注 easyExcel ...

  3. 视频教程-全新大数据企业电商数据仓库项目实战教程-大数据

    全新大数据企业电商数据仓库项目实战教程 张长志技术全才.擅长领域:区块链.大数据.Java等.10余年软件研发及企业培训经验,曾为多家大型企业提供企业内训如中石化,中国联通,中国移动等知名企业.拥有丰 ...

  4. 大数据应用项目创新大赛_全国高校大数据应用创新大赛

    2015年国务院发布<促进大数据发展行动纲要>,标志着大数据战略正式上升为国家战略.为配合国家大数据战略,加快产业人才培养,教育部增设了"数据科学与大数据技术"本科专业 ...

  5. 《大数据》2015年第3期“网络大数据专题”——网络大数据的文本内容分析

    网络大数据的文本内容分析 程学旗,兰艳艳 (中国科学院计算技术研究所 北京 100019) 摘要:文本内容分析是实现大数据的理解与价值发现的有效手段.尝试从短文本主题建模.单词表达学习和网页排序学习3 ...

  6. 在线教育大数据营销平台实战(一):大数据平台构建实战

    作者介绍 Tigerhu 在线教育公司大数据营销产品线负责人. 本人目前在一家在线教育公司担任大数据营销产品负责人,由于一些机缘巧合,我同时负责了数据产品线和营销CRM产品线,因此给了我更多的机会去思 ...

  7. 大学四年我这样学习大数据技术,成为了别人眼中的大神

    在大学里,千万不要老师教什么,你就只学什么,这是远远不够的,对于我们大数据专业,甚至整个计算机专业的同学来说,大学四年最重要的能力就是自学.大学的课程不像高中那么紧,留给我们自学的时间还是比较多的,作 ...

  8. 【BDTC 2016】中国移动苏州研发中心大数据部总经理,高级工程师钱岭:大数据研发历程的回顾和思考...

    [CSDN现场报道]2016年12月8-10日,由中国计算机学会(CCF)主办,CCF大数据专家委员会承办,中国科学院计算技术研究所.中科天玑数据科技股份有限公司与CSDN共同协办,以"聚焦 ...

  9. 大数据基础设施建设需要得到重视 | 记清华大数据“应用·创新”讲座

    "大数据基础设施是面向数据采集.数据分析和数据应用的创新性系统工程.它一方面指支撑大数据应用和大数据产业的基础设施,另一方面指用大数据和人工智能的方法,解决基础设施运行过程中的问题.&quo ...

最新文章

  1. java计算24小时之内_java的系统时间,怎么计算从现在到凌晨还剩下多少时间?
  2. np.trapz 生动的解释
  3. C++ Primer 5th笔记(2)chapter 2变量和基本类型
  4. 网络爬虫(urllib超详细使用指南)
  5. java订单超时取消设计_quartz框架和关闭超时订单
  6. 从Zipkin到Jaeger,Uber的分布式追踪之道tchannel
  7. 计算机系统基础:计算机可靠性知识笔记
  8. hdmi光端机运用于多媒体信息发布系统案例介绍
  9. python设计模式10-外观模式
  10. 计算机网络学习笔记(17. 计算机网络作业一)
  11. Java之StringBuffer使用方法
  12. matlab工具箱有哪些函数,matlab工具箱函数汇总(上)
  13. android 10 无线 电脑模式,Win10电脑和安卓手机无线互投教程
  14. 灵格斯!优秀的翻译软件!!!
  15. 江苏省南京市谷歌高清卫星地图下载
  16. 02333软件工程要点及考点
  17. 基于ESP32制作流光溢彩氛围灯
  18. 沉睡者IT - 抖音中视频计划赚钱项目初级教程
  19. 同网段能互通,跨网段不通
  20. ui设计师面试技巧总结

热门文章

  1. 掌握这些技巧助你轻松绘制程序流程图
  2. 第四次作业 结对编程-黄金点游戏
  3. Netscape Mozilla源代码指南
  4. 我使用的博客和通讯工具汇总
  5. 26条面试经典问答(真实工作经验)
  6. 梅尔频率倒谱系数(MFCC)资源
  7. 毕业设计:基于Web实现多用户宿舍管理系统
  8. BS-GX-017基于SSM实现的在线考试管理系统
  9. java中多线程的实现方式
  10. Spark2.0研究