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

如何在Kusto中对多列非字符串列实现多维度arg_max取最大值行?

Kusto中多列优先级最大化匹配行的高效实现(基于arg_max)

在Kusto中,你可以直接利用arg_max函数的多参数特性实现先最大化某一列、再最大化另一列的需求,无需嵌套partition+order by+take的组合,这种方式在大数据集上性能更优。

核心思路

arg_max(expr1, expr2, ..., <返回列>)的逻辑是:先按expr1取最大值,当expr1值相同时,再按expr2取最大值,以此类推,最终返回符合优先级的行。针对你需要的SN desc nulls last(空值后置),可以通过coalesce(SN, int(-2147483648))将null转换为int类型的最小值(确保非空SN在降序排序时排在前面),再传入arg_max。

高效实现代码

datatable (SN: int, id: string, ts: datetime, IT: datetime, V: double, S: string) [
  int(null), "t/1", datetime(2024-01-01), datetime(2024-01-01), 1.0, "asdf",
  int(null), "t/1", datetime(2024-01-01), datetime(2024-01-02), 2.0, "fdas",
  int(null), "t/1", datetime(2024-01-01), datetime(2024-01-03), 3.0, "qwer",
  1, "t/1", datetime(2024-01-01), datetime(2024-01-02), 3.0, "zcvbx",
  1, "t/1", datetime(2024-01-01), datetime(2024-01-02), 4.0, "qwer",
]
// 按id和ts分组,先最大化SN(空值后置),再最大化IT,返回所有列
| summarize arg_max(coalesce(SN, int(-2147483648)), IT, *) by id, ts

性能对比与优势

针对你提到的过滤后1000万行、id数千至数十万、每个id对应数十至数千个ts的场景,该方案比原partition方案更高效:

  • arg_max是Kusto原生聚合函数,查询优化器会生成更高效的执行计划,无需对每个分组内的数据全量排序;
  • 内存开销更低:arg_max仅需跟踪每个分组内符合优先级的当前最优行,而order by+take需要对分组内所有数据排序后再取首行;
  • 代码更简洁,可读性更强。

扩展说明

如果需要增加更多优先级列,只需在arg_max中依次添加表达式即可,例如需要再最大化V列,可修改为:

| summarize arg_max(coalesce(SN, int(-2147483648)), IT, V, *) by id, ts

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 16:13:09