产品又过来提需求了!
案例需求
需要按日汇总充值总数的数据。
过滤条件:
- 用户包括:“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其中主要七个部分:
![](https://img.haomeiwen.com/i8759769/1f6e9b68f816e1d9.png)
根据当前的需求,我们可以用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
}
}
]
返回结果:
搞定需求,可以回家啦!
参考
https://druid.apache.org/docs/latest/querying/timeseriesquery.html
网友评论