目前druid.io的版本已经发展到0.7.1了,其功能也在不断的完善中,功能的基本描述及使用在官方文档上面已经有很详细的介绍。
这里将不对功能做过多的描述,重点是在用的过程和怎么用。
目前druid.io提供了几个查询类型功能:
1、groupby
2、search
3、segment Metadata
4、timeseries
5、topN
6、datasource metadata
其中1、2、4、5属于使用功能;3、6属于管理功能。
在使用功能范围内,使用非常频繁的是1、4,然后是2、5。
先说简单的使用:
对于search应用,类似于在输入框里进行自动补全功能,不过druid.io支持的多个维度匹配和对多个value的匹配,个人觉得search的场景有很多替代方案。
多个维度search做过滤时,是没有记录关联性的。对于另一个topN来说,应用场景多数是排行榜这样的统计,例如:统计下载量排名前十的APP,topN是groupby功能的一个特例,在druid.io单独作为一个功能是对其进行了优化处理。关于排序的方式也有很多细节的区别,例如:数字排序、lexicographic、AlphaNumberic等。 AlphaNumberic方式功能很强,如下:
Traditional |
| Alphanum |
z1.doc z10.doc z100.doc z101.doc z102.doc z11.doc z12.doc z13.doc z14.doc z15.doc z16.doc z17.doc z18.doc z19.doc z2.doc z20.doc z3.doc z4.doc z5.doc z6.doc z7.doc z8.doc z9.doc |
| z1.doc z2.doc z3.doc z4.doc z5.doc z6.doc z7.doc z8.doc z9.doc z10.doc z11.doc z12.doc z13.doc z14.doc z15.doc z16.doc z17.doc z18.doc z19.doc z20.doc z100.doc z101.doc z102.doc |
关于timeseries的方式,也可以认为是 groupby功能的一个特例,主要针对没有维度选择的场景,这样可以提高计算和响应时间。
重点说下groupby类型,因为它是其它查询类型延伸的基础,整个groupby类型,包含维度选择、统计指标选择、过滤条件、时间范围及时区、排序方式、结果集返回大小,数据集选择。
维度选择属性dimensions
对于维度,细节可以做到展示名称与存储名称分离;提供维度值转换后的统计方式,例如:我要按ip前三段来做统计
click_ip
|
click
|
conversion
|
119.30.23.111
|
1
|
0
|
119.30.23.121
|
1
|
0
|
119.30.23.130
|
0
|
1
|
201.22.308.55 |
1
|
0
|
202.67.22.306
|
1
|
0
|
202.67.22.307
|
1
|
0
|
202.67.22.308
|
0
|
1
|
119.20.11.35
|
1
|
0
|
click_ip
|
click
|
conversion
|
119.30.23
| 2 | 1 |
201.22.308 |
1
|
0
|
202.67.22
|
2
|
1
|
119.20.11
|
1
|
0
|
过滤条件选择属性filters
注意:filters的处理是针对dimension的。
filters支持层级条件(通过and和or两个逻辑操作符进行),也是支持等于、js方式、正则方式进行判断。这里延伸出来一个问题就是对当前维度过滤,并且当前维度有转换逻辑,那么这两个逻辑在一起谁先执行呢?
如果需要对aggregations过滤使用Having语法功能。
统计指标属性aggregations和postaggregations。
我们先来了解下aggregations,引擎提供了最基础的方式:count、longsum、doublesum、min、max。
druid.io在针对aggregations的支持非常强悍,因为使用了js的引擎,所以能够非常灵活的应对不同的业务计算场景(包括复杂的计算逻辑),而且是配置化(个人使用感觉类似于fork/join和MR),并且也支持常量,dimension和metrics都可以参与其中。
postaggregations是在aggregations的基础之上在进行的处理,主要是对指标进行一个横向的二次计算处理,这两部分很重要,需要在实战中好好体会。
时间范围其实关联两方面,一个跟数据存储相关;一个跟数据查询相关;另一个特点就是支持时区转换查询特别适合业务范围属于全球化的公司。
结果集的默认返回是全量(这里涉及到对数据量的控制),当然为了快速响应是有一个limit的设置。