Elasticsearch - Dati cumulativi
Un processo di rollup è un'attività periodica che riepiloga i dati dagli indici specificati da un modello di indice e li inserisce in un nuovo indice. Nell'esempio seguente, creiamo un indice denominato sensore con diversi timestamp di data. Quindi creiamo un lavoro di rollup per eseguire il rollup dei dati da questi indici periodicamente utilizzando cron job.
PUT /sensor/_doc/1
{
"timestamp": 1516729294000,
"temperature": 200,
"voltage": 5.2,
"node": "a"
}
Eseguendo il codice sopra, otteniamo il seguente risultato:
{
"_index" : "sensor",
"_type" : "_doc",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
Ora aggiungi un secondo documento e così via anche per altri documenti.
PUT /sensor-2018-01-01/_doc/2
{
"timestamp": 1413729294000,
"temperature": 201,
"voltage": 5.9,
"node": "a"
}
Crea un lavoro cumulativo
PUT _rollup/job/sensor
{
"index_pattern": "sensor-*",
"rollup_index": "sensor_rollup",
"cron": "*/30 * * * * ?",
"page_size" :1000,
"groups" : {
"date_histogram": {
"field": "timestamp",
"interval": "60m"
},
"terms": {
"fields": ["node"]
}
},
"metrics": [
{
"field": "temperature",
"metrics": ["min", "max", "sum"]
},
{
"field": "voltage",
"metrics": ["avg"]
}
]
}
Il parametro cron controlla quando e quanto spesso viene attivato il lavoro. Quando si attiva la pianificazione cron di un processo di rollup, inizierà a essere riavviato dal punto in cui era stato interrotto dopo l'ultima attivazione
Dopo che il lavoro è stato eseguito ed elaborato alcuni dati, è possibile utilizzare la query DSL per eseguire alcune ricerche.
GET /sensor_rollup/_rollup_search
{
"size": 0,
"aggregations": {
"max_temperature": {
"max": {
"field": "temperature"
}
}
}
}