Druid查询语法

本文的demo示例均来源于。

druid使用_druid使用入门druid使用_druid使用入门


druid使用_druid使用入门


Druid的查询是使用Rest风格的请求查询服务,客户端通过发送Json对象请求查询接口。可以使用shell脚本查询或通过Google的ARC插件构造Post请求进行查询。

Shell脚本

其中:

为broker、historical或realtime进程所在机器的ip和提供服务的端口,query_json_file为json配置文件路径。

ARC插件

[上传失败...(image-5a63a0-1626656067202)]

不同的查询场景使用不同的查询方式。Druid有很多查询类型,对于各种类型的查询类型的配置可以通过配置不同的Query实现。Druid的查询类型,概括为以下3类:

1.聚合查询:时间序列查询(Timeseroes),Top查询(TopN),GroupBy查询(GroupBy)

2.元数据查询:时间范围(Time Boundary),段元数据(Segment Metadata),数据源(DataSource)

2.Search查询(Search)

一般聚合查询使用的较多,其他类型的查询方式使用场景较少且较简单,可直接参考给出的demo即可查询;本文主要介绍聚合查询。一般情况下,Timeseries和TopN查询性能优于GroupBy,GroupBy查询方式最灵活但是最耗性能。Timeseries查询性能明显优于GroupBy,因为聚合不需要其他GroupBy其他维度;对于Groupby和排序在一个单一维度的场景,TopN优于GroupBy。

一条Druid query中主要包含以下几种属性:

2.1 granularity

2.1.1 简单的聚合粒度

简单的聚合粒度有:all、none、second、minute、fif_minute、thirty_minute、hour、day、week、month、quarter、year;简单聚合粒度的查询取决于druid存储数据的最小粒度,如果构建数据的最小粒度是小时,使用minute粒度去查询,结果数据也是小时粒度的数据。

设存储在Druid中的数据使用毫秒粒度构建,数据格式如下:

提交一个小时粒度的groupBy查询,查询query如下:

提交一个小时粒度的groupBy查询,查询query如下:

按小时粒度进行的groupby查询结果中timestamp值到小时,比小时粒度更小粒度值自动补填零,以此类推按天查询,则小时及小粒度补零。timestamp值为UTC。查询结果如下:

如若指定聚合粒度为day,则按照天为单位对数据进行聚合,查询结果如下:

如若聚合粒度设置为none,则按照druid中build数据的最小粒度查询数据,即不进行聚合,如bulid数据的粒度是ms,则聚合出来的结果也是毫秒:

如若将聚合粒度设置为all,则返回数据的长度为1,即把查询时间段的数据做一个汇总:

可指定一定的时间段进行聚合,返回UTC时间;支持可选属性origin;不指定时间,默认的开始时间=1970-01-01T00:00:00Z;

持续时间段2小时,从1970-01-01T00:00:00开始:

时间聚合粒度的特例,方便使用,如年、月、日、小时等,日期标准是ISO 8601。无特别指定的情况下,year从1月份开始,month从1号开始,week从周一开始。

一般的格式为:其中timeZone可选,默认值是UTC;origin可选,默认1970-01-01T00:00:00;

period的一般写法为:

如提交一个1d作为聚合粒度的groupby查询的query:

查询得到的结果为:

给出的例子是以美国洛杉矶的时区为准,一般的时区这样使用,更多时区可移步该链接查询:

一个filter即一个json对象,代表一个过滤条件,等价于mysql中的一个where条件;过滤器的类型主要有:Selector filter,Regular expression filter(正则表达式过滤)、Logical expression filters(AND、OR、NOT)、In filter、Bound filter、Search filter、JaScript filter、Extraction filter;

等价于 WHERE = ''

json格式:

类似Selector过滤器,只不过过滤使用的是正则表达式;正则表达式为标准的ja正则表达式规范;

aggregations即汇总数据记性druid之前提供的一个数据采集一种聚合方式。常用的聚合类型主要有:count,sum,min/max,approximate,miscellaneous;

2.3.1 Count aggregator

符合查询条件的行数,类似mysql中的count计算:

Note: Druid进行Count查询的数据量并不一定等于数据采集时导入的数据量,因为Druid在采集数据查询时已经按照相应的聚合方式对数据进行了聚合。

2.3.2 Sum aggregator

与底层druid表中的字段类型一致。

longSum

2.4 聚合查询

2.4.1 Timeseries query

query

2.4.2 TopN query

TopN查询根据规范返回给定维度的有序的结果集,从概念上来讲,TopN查询被认为单维度、有序的类似分组查询。在某些情况下,TopN查询比分组查询(groupby query)快。TopN查询结果返回Json数组对象。TopN在每个将顶上K个结果排名,在Druid默认情况下值为1000。在实践中,如果你要求前1000个项顺序排名,那么从第1-999个项的顺序正确性是,其后项的结果顺序没有保证。你可以通过增加threshold值来保证顺序准确。

Apache Druid的SQL查询使用手册

[1] 书写使用说明

[2] 支持查询

[3] 使用说明

[1] 聚合函数

[2] 数值函数

[3] 字符串函数

[4] 时间函数

[5] IP地址函数

[6] 比较运算符

[7] 多值的字符串函数

[8] HLL草图运算符

[9] Theta草图运算符

[10] 分位数草图运算符

[11] 其他功能

[12] 不支持的功能

[1] 没有聚合的查询将使用Druid的Scan本机查询类型。

[2] 近似算法

[1] 通过Http发送json

[2] JDBC

[1] 信息模式

[2] 系统模式

[1] 单数据源

[2] 多数据源

[3] 查询结果

[1] selector

[2] columnComparison

[3] regex

[4] search

[5] in

[6] bound

[7] interval

[8] jascript

[9] extraction

[10] 逻辑组合

[11] 过滤器中使用extraction函数

[12] 时间戳上使用过滤器

[1] 计数聚合

[2] 总和聚合

[3] 最小/聚合

[4] JaScript聚合

[5] 估计聚合

[6] 过滤后聚合

[7] 扩展聚合

[1] Arithmetic

[2] fieldAccess

[3] Constant

[4] JaScript

[5] HyperUniqueCardinality

[1] 基本粒度

[2] duration粒度

[3] period粒度

[1] default

[2] extraction

看看你是链接的什么数据库,修改成该数据库的一个正确的查询语句试试

Alibaba-Druid 连接池使用

Spring Boot 2.0默认连接池为HikariCP,一款号称高性能的连接池。如没特殊要求使用默认连接池就可以,那么我们为什么要使用Druid呢。

注 HikariCP 基于spring boot 的metric功能,结合promeus + grafana也可以实现

下面记录下工作中用到的和密码加密功能:

使用版本:

配置文件:

启动项目后访问: