Azure中如何通过KQL union跨两个Log Analytics工作区获取全量行
核心原因
KQL的union算子默认使用kind=distinct模式,会自动移除所有字段值完全一致的重复行,不受数据来源的工作区限制。当两个工作区的ADFPipelineRun表中存在字段完全相同的失败记录时,就会被默认去重,最终导致统计结果比分别求和少20%。
解决方案
将union算子显式指定为kind=inner模式,该模式会保留所有输入源的所有行,不会执行去重逻辑。
基础修正版查询
ADFPipelineRun // 对应工作区A的ADFPipelineRun表 | union kind=inner workspace("<WorkspaceID for workspace B>").ADFPipelineRun | where Status == "Failed" | where TimeGenerated > ago(90d) | summarize CountFailed=count()
性能优化版查询
建议先对每个工作区的表做条件过滤,再执行union操作,能大幅减少跨工作区的数据传输量,提升查询效率:
// 先筛选工作区A的符合条件记录 ADFPipelineRun | where Status == "Failed" | where TimeGenerated > ago(90d) | union kind=inner ( // 同步筛选工作区B的符合条件记录 workspace("<WorkspaceID for workspace B>").ADFPipelineRun | where Status == "Failed" | where TimeGenerated > ago(90d) ) | summarize CountFailed=count()
可选:区分工作区统计结果
如果需要同时查看两个工作区各自的失败数量,可以增加withsource参数标记数据来源:
ADFPipelineRun | where Status == "Failed" | where TimeGenerated > ago(90d) | union withsource=SourceWorkspace kind=inner ( workspace("<WorkspaceID for workspace B>").ADFPipelineRun | where Status == "Failed" | where TimeGenerated > ago(90d) ) | summarize CountFailed=count() by SourceWorkspace
内容的提问来源于stack exchange,提问作者Soffi
相关产品推荐
相关产品推荐

