目前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的設置。