ES 汇总数据
Elasticsearch 汇总数据
Elasticsearch 提供汇总功能,有助于汇总索引中的数据并将其汇总到新索引中。这些存储的数据可以在未来需要时用于分析,但成本仅为原始数据存储成本的一小部分。在分析中保留历史数据非常有用。然而,有时会因为归档大量数据的财务成本而避免这样做。
例如,假设一个系统每天生成 4700 万个文档,这需要大量内存来存储它们。每一秒,这些数据都可用于实时分析。在历史分析的情况下,如果我们查看 5 年以上的数据,我们需要以较大的时间间隔工作,例如每小时或每日趋势。我们可以通过将这 4700 万个文档压缩为每小时摘要来节省大量空间。
Elasticsearch 6.3 随附滚动上功能。 elasticsearch 的 rollup 特性对于汇总后存储历史数据非常有用。以便在汇总后存储更少的内存。请注意,汇总作业是一项周期性任务。
汇总入门
要开始汇总功能,我们必须创建一个或多个 "Rollup作业" 来汇总数据。这些作业会汇总您指定的索引,并将滚动的文档放在二级索引中。您可以选择您选择的二级索引来放置这些滚动文档。这些汇总作业在后台连续运行。
创建索引
首先,我们将创建一个包含不同时间戳的索引。创建索引后,我们将使用 cron 作业定期创建汇总作业。您的文档可能类似于-
复制代码
PUT /rollupexample/_doc/01
{
"timestamp": 1516729294000,
"temperature": 200,
"voltage": 5.2,
"node": "x"
}
Response
通过执行上面的索引创建查询以及时间戳,您将获得与下面给出的相同的响应-
{
"_index": "rollupexample",
"_type": "_doc",
"_id": "01",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1,
}
向rollupexample 索引添加更多文档。
复制代码
Add more documents to rollupexample index.
PUT /rollupexample-2020-01-01/_doc/02
{
"timestamp": 1413729294000,
"temperature": 201,
"voltage": 5.9,
"node": "x"
}
创建汇总作业
现在我们将使用 _rollup API 创建汇总作业。这些文档汇总到每小时摘要中。汇总数据的代码可能看起来像-
Copy code
PUT _rollup/job/rollupexample
{
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*30 * * * * ?",
"page_size": 1000,
"groups": {
"date_histogram": {
"field": "timestamp",
"interval": "60m"
},
"terms": {
"field": ["node"]
}
},
"metrics": [
{
"field": "temperature",
"metrics": ["min", "max", "sum"]
},
{
"field": "voltage",
"metrics": ["avg"]
}
]
}
cron 参数有助于控制作业激活。它控制作业激活的时间和频率。当汇总作业的 cron 计划触发时,它开始从上次激活后离开的点开始汇总数据的过程。
汇总搜索
一次作业开始运行并处理了一些数据,我们可以使用 DSL Query 来搜索一些数据。查看下面的查询来搜索滚动数据-
Copy code
GET /rollupexample/_rollup_search
{
"size": 0,
"aggregations": {
"max_temperature": {
"max": {
"field": "temperature"
}
}
}
}