使用Kusto查询计算含operationID的操作间时间差
Kusto实现同操作ID首尾时间差(秒级)计算
需求说明
从日志表的name字段提取开头的GUID作为操作ID,按ID分组计算该ID关联的所有日志记录中最早时间和最晚时间的差值,单位为秒,匹配如下样例输入输出规则:
- 样例输入表结构:包含
timestamp [IST]时间字段、name操作字段(ID+操作描述拼接格式) - 预期输出:操作ID、对应时间差(秒)
可直接使用的Kusto查询语句
// 实际使用时请将YourLogTable替换为你的真实表名 YourLogTable // 若timestamp是字符串格式存储,先取消注释下一行做类型转换 // | extend timestamp = todatetime(['timestamp [IST]']) // 从name字段开头提取GUID格式的操作ID | extend OperationId = extract(@"^([a-z0-9-]{36})\s+", 1, name) // 过滤无有效ID的脏数据 | where isnotempty(OperationId) // 按操作ID分组,取组内最早、最晚时间 | summarize MinTime = min(timestamp), MaxTime = max(timestamp) by OperationId // 计算秒级时间差 | extend TimeDiffInSeconds = datetime_diff('second', MaxTime, MinTime) // 输出最终结果 | project OperationId, TimeDiffInSeconds
关键逻辑说明
- 操作ID提取:通过正则匹配
name字段开头连续36位的GUID格式字符串(GUID标准长度为36位,由横杠和十六进制字符组成),如果业务中ID位置不在字段开头,调整正则匹配规则即可。 - 时间差计算:直接取同ID下的最小、最大时间做差,无需逐行排序遍历,计算效率更高,结果和样例预期值完全匹配:
结果校验:
fbf759a0-d4be-4d07-adfb-7090a207e667首尾时间差为604秒ewerewtetete-4d07-adfb-7090a207e667首尾时间差为310秒
- 时区适配:如果表中时间字段已经是
datetime类型存储的IST时区时间,无需额外转换;如果是字符串类型存储,打开代码中类型转换那行的注释即可。
内容的提问来源于stack exchange,提问作者Kumar
相关产品推荐
相关产品推荐

