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

Kusto中判断列提取值是否为字典键并返回对应值的方法

Kusto实现字典键不存在时返回原编码的方法

实现原理

Kusto中访问dynamic类型字典的不存在键时,会直接返回null,不需要额外遍历键集合做存在性判断,基于这个特性即可快速实现需求分支:

  1. 从Name字段提取两个下划线之间的位置编码
  2. 用提取到的编码查询字典获取友好名称
  3. 若查询结果为null(即编码不在字典中),返回原始位置编码;否则返回匹配到的友好名称

标准iif条件写法(符合要求的条件判断语法)

Floor_Name字段的计算逻辑如下,这里用split(Name, "_")[1]提取两个下划线中间的编码段,比硬编码偏移量的substring写法通用性更强,不受前后段长度变化影响:

Floor_Name = iif(
    isnull(mydict[split(Name, "_")[1]]),  // 判断字典中是否存在对应编码
    tostring(split(Name, "_")[1]),        // 不存在则返回原始编码
    tostring(mydict[split(Name, "_")[1]]) // 存在则返回友好名称
)

如果需要保持原有substring的提取逻辑,把split(Name, "_")[1]替换为substring(Name, 3, 4)即可,判断逻辑完全一致。


完整可运行测试代码

代码中新增了FX_105F_F00测试样例,可以直接运行验证结果:

let data = datatable(Timestamp:datetime, Name:string, Value:int)
            [
             datetime(2022-02-18 10:00:00 AM), "AX_100A_A00", 100,
             datetime(2022-02-18 10:01:00 AM), "BX_101B_B00", 200,
             datetime(2022-02-18 10:02:00 AM), "CX_102C_C00", 300,
             datetime(2022-02-18 10:03:00 AM), "DX_103D_D00", 400,  
             datetime(2022-02-18 10:04:00 AM), "EX_104E_E00", 500,
             datetime(2022-02-18 10:05:00 AM), "FX_105F_F00", 600
            ];
    let mydict = dynamic(
        {
             "100A":"New York"
            ,"101B":"Geneva"
            ,"102C":"France"
            ,"103D":"US"
            ,"104E":"Canada"
        }
    );
    data
    | summarize result = max(Value) by Floor_Name = iif(
        isnull(mydict[split(Name, "_")[1]]),
        tostring(split(Name, "_")[1]),
        tostring(mydict[split(Name, "_")[1]])
    )

运行结果

Floor_Nameresult
New York100
Geneva200
France300
US400
Canada500
105F600

不在字典中的编码105F已按要求直接作为Floor_Name返回。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:18:29