如何在KQL中通过Datatable函数将日志ID映射为友好名称?
最优解决方案:使用KQL的
lookup操作符 你已经搭建好映射表的基础框架,直接用lookup就能高效完成ID到友好名称的替换,既符合你只维护一份映射的需求,也比逐个写CASE语句简洁得多。
基础实现示例
假设你的Application Insights日志表是requests(请根据实际表名替换),待转换的ID字段叫exId,查询写法如下:
let exMapping = datatable(id: string, company: string)[ "ex1579", "Microsoft", "ex1580", "IBM" ]; requests | lookup exMapping on $left.exId == $right.id | project-away id // 移除映射表的冗余id字段 | project-rename companyName = company // 可选:给友好名称字段改个更直观的名字 // 可选:如果有ID未匹配到映射,用原ID填充避免空值 | extend companyName = coalesce(companyName, exId)
进阶维护方案(适配频繁变更的映射)
如果映射条目多达数百条且需要经常修改,把映射写在查询里还是麻烦,推荐两种更高效的维护方式:
- 创建存储函数:把映射表封装成一个函数,后续查询直接调用,修改映射只需要更新函数即可:
查询时直接调用函数:.create function with (folder = "MappingFunctions") getCompanyMapping() { datatable(id: string, company: string)[ "ex1579", "Microsoft", "ex1580", "IBM" // 后续新增/修改映射直接在这里调整 ] }requests | lookup getCompanyMapping() on $left.exId == $right.id | extend companyName = coalesce(company, exId) | project-away id, company - 使用存储表:如果映射数据量极大或者需要多人协作维护,可以把映射数据存在专门的Kusto表(比如
CompanyMappings)中,查询时直接关联该表,维护时仅需向表中插入/更新数据即可。
为什么选lookup而非join?
lookup是专门为「左表匹配右表键值」的场景设计的,性能比普通join更优,语法也更简洁,默认只匹配第一条结果,完全适配你替换ID的核心需求。
内容的提问来源于stack exchange,提问作者NSM
相关产品推荐
相关产品推荐

