产品又过来提需求了!
案例需求
需要按日汇总充值总数的数据。
过滤条件:
- 用户包括:“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
}
}
]