Application Insights Log Query Получить последнюю строку в группе
Я пытаюсь найти последнюю строку каждого члена группы в Application Insights.
Вот запрос:
traces |
where timestamp > ago(1h) |
where message startswith "TEST DONE" |
order by timestamp desc nulls last |
extend json=parse_json(substring(message,10)) |
summarize any(timestamp, tostring(json.status)) by tostring(json.testKey)
Он возвращает только одну строку, но это не самая последняя, это любая случайная строка из набора возможных строк.
2 ответа
Решение
Я думаю, что вы ищете arg_max
функционировать?
https://docs.microsoft.com/en-us/azure/kusto/query/arg-max-aggfunction
что-то вроде:
traces |
where timestamp > ago(1h) |
where message startswith "TEST DONE" |
order by timestamp desc nulls last |
extend json=parse_json(substring(message,10)) |
extend testKey = tostring(json.testKey) |
extend status = tostring(json.status) |
summarize arg_max(timestamp, status) by testKey
Вы можете использовать makelist([имя столбца], 1), чтобы выбрать первый. Затем обратитесь к нему по индексу. Использование этой техники позволило решить вышеуказанную проблему с моим набором данных.
Вот адаптация к вашему запросу:
traces |
where timestamp > ago(1h) |
where message startswith "TEST DONE" |
order by timestamp desc nulls last |
extend json=parse_json(substring(message,10)) |
extend testKey = tostring(json.testKey) |
summarize timeStampList=makelist(timestamp, 1), statusList=makelist(tostring(json.status), 1) by testKey |
project timeStampList[0], statusList[0], testKey