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

KQL如何过滤仅大小写不同的重复记录并保留单条结果

问题说明

需要过滤仅存在大小写差异的重复账号记录,示例重复数据如下:

my.user@mydomain.com
My.USER@mydomain.com

此前使用查询语句| where AccountName in~ ('my.user')做过滤,预期仅返回1条匹配记录,但实际返回了上述2条大小写不同的同用户重复记录,目标为仅保留1条有效记录。

根因分析

KQL中后缀带~的比较/匹配操作符(包括in~、=~等)仅实现大小写不敏感的条件匹配,不自带结果去重能力:只要字段值满足匹配规则,无论存在多少种大小写变体,所有符合条件的记录都会被完整返回。

修复方案

在匹配逻辑后追加基于统一大小写规则的去重步骤即可,参考实现如下:

场景1:匹配指定账号后去重

如果需要先筛选特定账号、再对该账号的大小写变体去重,使用以下语句:

| where AccountName in~ ('my.user@mydomain.com')
// 生成统一转小写的标准化账号字段作为去重基准
| extend NormalizedAccount = tolower(AccountName)
// 按标准化账号分组,每组保留1条记录,可根据需求选择保留规则
// 要保留最新/最早记录时,将arg_max替换为对应时间字段排序,例:arg_max(LastModifiedTime, *)
| summarize any(*) by NormalizedAccount
// 删除临时生成的标准化字段,保持原有输出结构
| project-away NormalizedAccount

场景2:全表账号按大小写维度去重

如果需要对整张表的所有账号做大小写去重,不需要指定特定匹配账号,直接使用以下语句:

| extend NormalizedAccount = tolower(AccountName)
| summarize any(*) by NormalizedAccount
| project-away NormalizedAccount

关键逻辑说明

  • tolower()将所有账号值统一转为小写,同账号的所有大小写变体都会被识别为同一分组
  • 分组取数规则可按需调整:
    • 无特殊保留要求时用any(*),随机返回组内1条有效记录,性能最优
    • 需要保留特定属性的记录(如最新创建、最后更新的记录)时,用arg_max(排序字段, *)或arg_min(排序字段, *)实现
  • project-away仅用于清理临时计算字段,不会修改原表的账号字段值

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 11:24:42