Hi,
I'm using table visualization in ELK 8.17. The doc format are as following:
"_source": {
"service": "service1",
"detail": [
{
"name": "microservice1",
"duration_time": 0.180120
},
{
"name": "microservice2",
"duration_time": 0.089255
},
{
"name": "microservice3",
"duration_time": 0.132267
},
...
]
}
I want to get a table visulization as following:
Service Name |
Microservice Name |
Duration Time |
service1 |
microservice3 |
0.082923 |
service1 |
microservice2 |
0.102923 |
service1 |
microservice1 |
0.182923 |
... |
... |
... |
|
|
|
|
|
|
I tried with LENS by aggregation by service, name and duration_time, the result is not what I want. It's a cartesian product of name and duration_time. I also tried MV_ZIP name and duration first, then MV_EXPAND the zipped result with ESQL. It's not cartesian product now, but the name and duration_time are not in order. How can I get what I want?
Hi @richard2025 ,
Have you considered using Runtime Fields to create a calculated field that preserves the relationship between the data in the array?
Hi @Alex_Salgado-Elastic,
Thanks for your reply. I tried with Runtime Fields as following:
def details = params._source.detail;
def result = "";
if (details != null && details.length > 0) {
for (int i = 0; i < details.length; i++) {
result += details[i].name + ":" + details[i].duration_time + ";";
}
if (result.endsWith(";") {
result = result.substring(0, result.length() - 1);
}
}
emit(result)
The new field contains a string with the correct relationship of name and duration_time. How to split the new field into rows in visualization?
Hello @richard2025
Could you please try using below ES|QL and see if it meets your requirement :
FROM kib-dash
| EVAL service_name = service
| EVAL paired = MV_ZIP(detail.name, TO_STRING(detail.duration_time))
| MV_EXPAND paired
| EVAL microservice_name = MV_FIRST(SPLIT(paired, ",")),
duration_time = TO_DOUBLE(MV_LAST(SPLIT(paired, ",")))
| KEEP service_name, microservice_name, duration_time
| SORT service_name ASC, microservice_name ASC
| LIMIT 1000
Thanks!!
Hello @Tortoise
Thanks for your reply. This is not what I want as the relationship of name and duration_time is not preserved. According to the document, The order that multivalued fields are read from underlying storage is not guaranteed.