У меня есть набор данных, как показано ниже
[
env_seqNum:int, env_tim:datetime, message:string, scenario: string, subscenario: string, requestId: string
1,2024-05-30T09:33:29.00Z, StartingOperation getToken XXX, ScenarioA, SubscenarioA, abcd-fghf,
2,2024-05-30T09:33:35.00Z, FinishingOperation getToken XXX, ScenarioA, SubscenarioA, abcd-fghf,
15,2024-05-30T09:33:55.00Z, StartingOperation getToken XXX, ScenarioA, SubscenarioA, abcd-fghf,
19,2024-05-30T09:33:58.00Z, FinishingOperation getToken XXX, ScenarioA, SubscenarioA, abcd-fghf,
]
Как видите, у меня есть операция получения токена, которая выполняется дважды в одном запросе для выполнения двух вызовов API.
Теперь я хочу знать совокупное время, затраченное на операцию получения токена на каждый запрос.
Я не могу просто сделать разницу между первой и последней строкой, поскольку это дает мне разницу в 29 секунд, тогда как на самом деле обе операции получения токена заняли 9 секунд (6 и 3).
Как мне заставить это работать в KQL?
Мне интересно, как мы можем использовать столбец env_seqNum для выполнения этой операции, поскольку она уникальна для каждой строки, которую он регистрирует, или есть ли лучший способ?


Таблица выглядит следующим образом:

Чтобы получить совокупную продолжительность, вы можете использовать следующий запрос KQL:
let Rith = datatable (
ri_env_seqNum:int,
ri_env_tim:datetime,
ri_message:string,
ri_scenario:string,
ri_subscenario:string,
ri_requestId:string
) [
1, datetime(2024-05-30T09:33:29.00Z), "StartingOperation getToken XXX", "ScenarioA", "SubscenarioA", "abcd-fghf",
2, datetime(2024-05-30T09:33:35.00Z), "FinishingOperation getToken XXX", "ScenarioA", "SubscenarioA", "abcd-fghf",
15, datetime(2024-05-30T09:33:55.00Z), "StartingOperation getToken XXX", "ScenarioA", "SubscenarioA", "abcd-fghf",
19, datetime(2024-05-30T09:33:58.00Z), "FinishingOperation getToken XXX", "ScenarioA", "SubscenarioA", "abcd-fghf"
];
let ri_so_OP = Rith
| where ri_message startswith "StartingOperation getToken"
| project ri_requestId, start_seqNum = ri_env_seqNum, start_time = ri_env_tim;
let ri_fo_OP = Rith
| where ri_message startswith "FinishingOperation getToken"
| project ri_requestId, ri_finish_seqNum = ri_env_seqNum, finish_time = ri_env_tim;
let ri_pa_OP = ri_so_OP
| join kind=inner (ri_fo_OP) on ri_requestId
| where ri_finish_seqNum > start_seqNum
| summarize ri_min_finish_seqNum = min(ri_finish_seqNum) by ri_requestId, start_seqNum, start_time
| project ri_requestId, start_seqNum, start_time, ri_min_finish_seqNum;
ri_pa_OP
| join kind=inner (ri_fo_OP) on $left.ri_requestId == $right.ri_requestId and $left.ri_min_finish_seqNum == $right.ri_finish_seqNum
| project ri_requestId, start_time, finish_time, duration = datetime_diff('second', finish_time, start_time)
| summarize rith_cumula_duration = sum(duration) by ri_requestId
| project ri_requestId, rith_cumula_duration
Выход:

Привет @RithwikBojja, я новичок и пытаюсь испачкать руки KQL. Как нам развить такие продвинутые навыки в KQL? Есть какие-нибудь предложения для меня?
Попробуйте и попробуйте проверить некоторые документы по этому поводу.
Ожидается что-то вроде requestId, Operation, subScenario, TimeTaken abcd-fghf, TokenAcquired, SubScenario, 9 (6+3).