Druid 分析报表中的实战(一)

产品又过来提需求了!

 

案例需求

需要按日汇总充值总数的数据。

过滤条件:

  1. 用户包括:“Tom”和“Jack”
  2. 所有城市:“北京”、“上海”、“广州”和“深圳”
  3. 日期范围:“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
    }
  }
]

返回结果:

 

搞定需求,可以回家啦!

 

参考

https://druid.apache.org/docs/latest/querying/timeseriesquery.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章