无关联列时,如何用KQL对比上周最低TriggersStarted时段与今日近1小时数据?
解决KQL中无共同列的数据集对比问题:过去一周最低小时触发量vs今日1小时触发量
问题背景
需要对比过去一周内TriggersStarted触发量最低的小时数据,与今日过去1小时的TriggersStarted触发量,但两个数据集无共同列,无法使用join关联。
可行解决方案
不需要依赖join,可以通过以下两种方式实现结果对比:
方法1:用toscalar将单值结果转为标量引用
toscalar能把单个值的查询结果转换成标量,直接在另一个查询中调用:
// 计算过去一周的最低小时触发量,存储为标量 let last_week_lowest = toscalar( AzureMetrics | where TimeGenerated between (ago(7d) .. endofday(ago(1d))) | where MetricName == "TriggersStarted" | summarize hourly_count = count() by bin(TimeGenerated, 1h) | summarize min(hourly_count) ); // 计算今日过去1小时触发量,并关联标量值 AzureMetrics | where TimeGenerated > ago(1h) | where MetricName == "TriggersStarted" | summarize today_last_hour = count() | extend last_week_min_hour = last_week_lowest | project 今日过去1小时触发量=today_last_hour, 过去一周最低小时触发量=last_week_min_hour
方法2:用union合并两个带标识的结果表
分别生成带指标说明的结果表,再合并展示:
// 生成过去一周最低小时触发量的结果表 let last_week_data = AzureMetrics | where TimeGenerated between (ago(7d) .. endofday(ago(1d))) | where MetricName == "TriggersStarted" | summarize hourly_count = count() by bin(TimeGenerated, 1h) | summarize min_count = min(hourly_count) | project 指标类型="过去一周最低小时触发量", 触发量=min_count; // 生成今日过去1小时触发量的结果表 let today_data = AzureMetrics | where TimeGenerated > ago(1h) | where MetricName == "TriggersStarted" | summarize total_count = count() | project 指标类型="今日过去1小时触发量", 触发量=total_count; // 合并两个结果表 union last_week_data, today_data
原问题分析
你尝试的join无法生效,是因为两个子查询都只返回单个值的结果集,没有可用于匹配的共同列。上述两种方法绕过了join的限制,直接实现两个独立计算结果的对比展示。
内容的提问来源于stack exchange,提问作者Nikhil Babu Battula
相关产品推荐
相关产品推荐

