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

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