產品又過來提需求了!
案例需求
需要按日彙總充值總數的數據。
過濾條件:
- 用戶包括:“Tom”和“Jack”
- 所有城市:“北京”、“上海”、“廣州”和“深圳”
- 日期範圍:“2020-03-01”到“2020-03-05”
我們用SQL語句表示一下產品需要什麼數據,能夠直觀的理解需求,SQL表達如下:
SELECT
date,SUM(rechange) AS rechange
FROM
user_recharge_record
WHERE
date>='2020-03-01' AND date<='2020-03-05' AND
user_name IN ('Tom', 'Jack') AND
city IN ('北京','上海','廣州','深圳')
GROUP By create_date;
druid常用的三種數據查詢類型:Timeseries,TopN,GroupBy。
Timeseries:按照指定日期時間段查詢規則返回聚合合的結果集,查詢規則中可以設置查詢粒度、維度,過濾條件和排序方式,並且支持後聚合。返回一個JSON對象數組。
Timeseries其中主要七個部分:
property |
description |
required? |
queryType |
查詢類型:如:Timeseries、GroupBy,TopN |
yes |
dataSource |
數據源,類似於MySQL的數據表 |
yes |
descending |
是否降序,默認爲false |
no |
intervals |
間隔,也是查詢日期範圍,結束日期向後加1 |
yes |
granularity |
查詢粒度 |
yes |
filter |
過濾條件 |
no |
aggregations |
聚合器 |
no |
postAggregations |
後聚合器 |
no |
context |
可以修復查詢行爲,包括總計和零填充。應用於所有查詢類型的參數。 |
no |
根據當前的需求,我們可以用Timerseries查詢類型來計算指標。
查詢樣例
{
"queryType": "timeseries", // 查詢的類型
"dataSource": "user_recharge_record", // 數據源
"granularity": "day", // 指定日期聚合分區,按照每天的日期維度彙總數據
"filter": { // 過濾條件
"type": "and",
"fields":
[
{
"dimension": "user_name",
"type": "in",
"values": ["Tom", "Jack"]
},
{
"dimension": "city",
"type": "in",
"values": ["北京", "上海", "廣州", "深圳"]
}
]
},
"context": {
"timeout": 28000 // 超時時間
},
"aggregations": [ // 聚合器
{
"name": "rechange", // 聚合後輸出的名字
"type": "doubleSum", // 數值類型累加
"fieldName": "rechange" // 聚合時使用的指標列名稱
}
],
"intervals": "2020-03-01\/2020-03-06" // 日期區間
}
Results:
[
{
"timestamp": "2020-03-01T00:00:00.000+08:00",
"result": {
"rechange": 21195.0
}
},
{
"timestamp": "2020-03-02T00:00:00.000+08:00",
"result": {
"rechange": 29785.0
}
},
{
"timestamp": "2020-03-03T00:00:00.000+08:00",
"result": {
"rechange": 31123.0
}
},
{
"timestamp": "2020-03-04T00:00:00.000+08:00",
"result": {
"rechange": 33818.0
}
},
{
"timestamp": "2020-03-05T00:00:00.000+08:00",
"result": {
"rechange": 33658.0
}
}
]