目標:回傳每天的每秒資料筆數的最大值
要「在 input 時間區間範圍內的資料,計算每秒的資料筆數(event per second),回傳每天 EPS 最大值的數字」。
Sample 資料內容
期望的 output
- 先分成每天,12/1、12/2、12/3,共三天。
- 12/1 的每秒的資料數為 1、1、1,最大值為 1。
- 12/2 的每秒的資料數為 1、1、1、1,最大值為 1。
- 12/3 的每秒的資料數為 1、2、3,最大值為 3。
結論:Date Histogram Aggregation+Date Histogram Aggregation+Bucket Sort Aggregation
可以使用的語法:
研究過程 1. 先用 Date Histogram Aggregation
先將資料依照「天」去做分類:
研究過程 2. 將資料依照「秒」來做分類
看可不可以再將資料依照「秒」來做分類。從 Date Histogram Aggregation 的文件中來看,Date Histogram Aggregation 好像可以用 fixed_interval 來做秒的分類。但是實際試的時候有遇到一些問題,先用「小時」來分類:
可以看起來蠻正常的。但是如果將 fixed_interval 換成 1m 的話,就會多出很多不必要資訊(doc_count 是 0 的):
希望把 doc_count 是 0 的資料拿掉。加上 min_doc_count 設定可以做到:
再將 fixed_interval 換成 1s,這時就可以 work:
研究過程 3. 找最大 doc_count 的 bucket
先嘗試將以「秒」分類的 bucket 做由大到小排序,使用 order 功能:
因為嘗試 Max Bucket Aggregation 一直不成功,所以改用 Bucket Sort Aggregation,將以秒分類的 bucket 依照 doc_count 排序後,只顯示第一個即為最大值。
也算是有達到目標效果。先這樣吧!!
其他:too_many_buckets_exception
把資料依照「秒」來區分的時候,有出現以下錯誤:
Trying to create too many buckets. Must be less than or equal to: [10000] but was [10001]. This limit can be set by changing the [search.max_buckets] cluster level setting.
太多 buckets 了會出現錯誤,可以用 min_doc_count 設定將 doc_count 是 0 的 bucket 移除。
結束~!