You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Log Analytics KQL中组合distinct与project实现指定列去重

KQL指定列去重同时保留其他字段解决方案

现有写法的问题是distinct运算符仅会返回语句中指定的列,会丢失提前用project声明的TimeGenerated、Start、ErrorMessage等其他需要的字段,无法满足需求。推荐使用summarize配合arg_max/any聚合函数实现需求,具体查询语句如下:

ADFActivityRun
| where ActivityType in ("Copy", "ExecuteDataFlow")
| where Status in ("Succeeded", "Failed")
| extend 
    DataFactory=substring(tostring(split(ResourceId, "/", 8)), 2, strlen(tostring(split(ResourceId, "/", 8)))-4),
    RowsRead = parse_json(Output).rowsRead,
    RowsCopied = parse_json(Output).rowsCopied,
    rowsWritten = parse_json(Output).runStatus.metrics.sink1.rowsWritten
// 按需要去重的列分组,取每组最新生成的1条记录的全部字段
| summarize arg_max(TimeGenerated, *) by PipelineName, PipelineRunId, ActivityName, Status, ActivityType, DataFactory
// 按需筛选最终返回的字段
| project TimeGenerated, DataFactory, PipelineRunId, PipelineName, ActivityName, Status, ActivityType, Start, End, ErrorMessage, FailureType, RowsRead, RowsCopied, rowsWritten
| order by TimeGenerated desc

方案说明

  • 优先用extend做字段计算,不会提前裁剪数据集,避免后续聚合时丢失所需字段
  • arg_max(TimeGenerated, *)中by后接的就是需要保证唯一的去重列,*表示返回该条记录的所有字段,如果不需要最新记录,仅需随机返回分组内一条记录,可替换为any(*)
  • 最后用project筛选要输出的字段,可根据实际需求调整返回内容
  • 小优化:将多条件等值判断替换为in()运算符,简化查询语句

内容的提问来源于stack exchange,提问作者Adeleke Abimbola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 05:27:01