Druid 分析报表中的实战(二)
生活随笔
收集整理的這篇文章主要介紹了
Druid 分析报表中的实战(二)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
今天介紹一下druid常用查詢類型的TopN和GroupBy。
實(shí)踐服務(wù)器配置:
CPU:24核+SSD 1.4T Flush卡*2+內(nèi)存256G+千兆網(wǎng)卡 * 15臺(tái)
數(shù)據(jù)量:4億+/天,連續(xù)100天數(shù)據(jù),數(shù)據(jù)總量400億+-
一、數(shù)據(jù)分類:
| Timestamp | 將時(shí)間相近的一些數(shù)據(jù)聚合在一起,查詢的時(shí)候指定時(shí)間范圍,底層使用絕對(duì)毫秒數(shù)保存的時(shí)間戳,默認(rèn)使用ISO-8601格式展示時(shí)間,格式:YYYY-MM-DDTHH:MM:SSSZ,“Z“代表零時(shí)區(qū),中國所在的東八區(qū)為:“+08:00” |
| Dimensions | 與OLAP中的維度是一樣的,一條記錄中的字符型數(shù)據(jù)可看做是維度列,維度列被用于過濾篩選數(shù)據(jù),分組數(shù)據(jù)等,標(biāo)識(shí)一些統(tǒng)計(jì)的維度,比如:名稱、類別等 |
| Metrics | 質(zhì)量列被用于聚合和計(jì)算的列,比如:訪問總數(shù)、合計(jì)金額等 |
二、查詢介紹:
| Timeseries | 按照指定日期時(shí)間段查詢規(guī)則返回聚合合的結(jié)果集,查詢規(guī)則中可以設(shè)置查詢粒度、維度,過濾條件和排序方式,并且支持后聚合。返回一個(gè)JSON對(duì)象數(shù)組。 |
| TopN | 適用于單維度查詢,通過給定規(guī)則和指標(biāo)維度返回一個(gè)結(jié)果集,TopN查詢可看做是給定排序規(guī)則,返回單一維度的Group By查詢,比實(shí)際Group?By查詢查詢快很多,Metic屬性是TopN專屬的指標(biāo)排序列。 |
| GroupBy | 適用于多維度查詢,使用方面是最靈活也最耗性能。 |
從性能上來講Timeseries和TopN查詢性能優(yōu)于GroupBy。
三、參數(shù)解釋:
| aggregation | 對(duì)應(yīng)“SELECT X,Y FROM”,要查詢的某些列 |
| dimensions | 對(duì)應(yīng)“GROUP BY X,Y”,基于哪些列分組 |
| filter | 對(duì)應(yīng)“WHERE?X=1?AND|OR?Y=2”,過濾條件 |
| granularity | 數(shù)據(jù)聚合的粒度 |
四、TopN案例:
1、案例需求:
- 用戶名:“Jack”
- 維度:“City”
- 日期范圍:2020-03-01至2020-03-31
- 按“rechange”排序取前三條記錄
- SQL表達(dá):
2、查詢請(qǐng)求:
{"queryType": "topN","dataSource": "user_recharge_record","granularity": "all","filter": {"type": "and","fields": [{"type": "selector","dimension": "user_name","value": "Jack"}]},"dimension": "city","threshold": "3", //返回的TOP行數(shù)"metric": "rechange","aggregations": [{"name": "recharge","type": "doubleSum","fieldName": "recharge"}],"intervals": "2020-03-01/2020-04-01","context": {"timeout": 28000} }3、返回結(jié)果:
[{"timestamp": "2020-02-29T16:00:00.000Z","result": [{"recharge": 661.61,"city": "北京"},{"recharge": 503.48,"city": "上海"},{"recharge": 362.59,"city": "廣州"}]} ]4、響應(yīng)時(shí)間:
Time:60ms+-
五、GroupBy案例:
1、案例需求:
- 用戶名:“Jom”
- 維度:“City”,“UserName”
- 日期范圍:2020-03-01至2020-03-31
- 按“rechange”排序取前三條記錄
- SQL表達(dá):
2、查詢請(qǐng)求:
{"dataSource": "user_recharge_record", // 數(shù)據(jù)源"queryType": "groupBy", // 查詢類型"granularity": "all", // 所有"intervals": "2020-01-01/2020-04-01", // 查詢區(qū)間"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": ["工程師", "項(xiàng)目經(jīng)理", "研發(fā)主管"]}]},"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": "研發(fā)主管","user_name": "Jom","views": 165.0}} ]4、響應(yīng)時(shí)間:
Time:800ms+-
結(jié)論:
如上實(shí)例均為50~800ms以內(nèi)返回?cái)?shù)據(jù)。
Timeseries、TopN查詢速度最快,GroupBy多維度分析較慢。
?
總結(jié)
以上是生活随笔為你收集整理的Druid 分析报表中的实战(二)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 7 cmake:curses
- 下一篇: Hive的列分隔符和行分隔符