计算时间序列值的变化率

时间:2015-03-03 08:34:00

标签: elasticsearch aggregation

我有一个将时间序列数据写入Elasticsearch的应用程序。 (简化)数据如下所示:

{
    "timestamp": 1425369600000,
    "shares": 12271
},
{
    "timestamp": 1425370200000,
    "shares": 12575
},
{
    "timestamp": 1425370800000,
    "shares": 12725
},
...

我现在想用聚合来计算shares字段的变化率" buckets",例如

最近10分钟内的股票价值变化率"桶"可以恕我直言计算

# of shares t1
--------------
# of shares t0

我尝试了日期直方图聚合,但我想这不是我需要计算的变化率,因为这只会给我doc_count,而且它不清楚我如何计算这些变化率:

{
    "aggs" : {
        "shares_over_time" : {
            "date_histogram" : {
                "field" : "timestamp",
                "interval" : "10m"
            }
        }
    }
}

有没有办法在Elasticsearch中实现聚合目标?我搜索文档,但没有找到匹配的方法。

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为使用开箱即用的聚合功能很难实现。但是,您可以查看percentile_ranks_aggregation并将自己的修改添加到脚本中以创建时间点。

另外,对于off-top感到抱歉,但我想知道:弹性搜索最适合那种东西吗?据我所知,在任何给定的时间点,您只需要先前的样本数据来计算当前样本的正确率。这听起来像是更适合某些sliding window algorithm实时实现(甚至在像Postgres这样的一些关系数据库上),你可以在桶中保留固定数量的时间桶和计数器。一旦新样本“到达”,您将更新(滑动)窗口并计算最近时间桶的更新速率。