Kusto中如何提取子字符串并批量映射替换为友好名称
Kusto位置编码映射友好名称实现方案
字典映射方案可行性
你设想的键值字典匹配方案完全可行,Kusto原生支持dynamic类型的字典结构做键值检索,50组映射的规模对查询性能几乎无影响,实现逻辑简单直接。
核心实现代码如下:
// 定义编码-友好名称映射字典,新增映射直接追加键值对即可 let location_map = dynamic({ "100A": "纽约", "101B": "日内瓦", "102C": "法国", "103D": "美国", "104E": "加拿大" }); 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, ]; data // 提取位置编码,建议用split替代固定位substring,适配前缀长度变化的场景 | extend Floor_Code = split(Name, "_")[1] // 匹配友好名称,可加兜底逻辑处理未收录的编码 | extend Floor_Name = iif(isnull(location_map[Floor_Code]), Floor_Code, location_map[Floor_Code]) | summarize result = max(Value) by Floor_Name
分场景的优化方案
根据你的映射维护需求,可以选择更适配的实现方式:
- 映射固定、仅单查询使用:直接用上述动态字典方案即可,写法最简洁,没有额外关联开销。
- 映射频繁更新、需要多查询复用:建议单独创建位置编码映射维表,存储
Floor_Code(位置编码)、Floor_Name(友好名称)两列数据,查询时通过lookup关联即可,不需要每次查询硬编码全量映射,维护成本更低。关联示例代码:
// 维表可独立维护更新,所有查询共用 let location_dim = datatable(Floor_Code:string, Floor_Name:string) [ "100A", "纽约", "101B", "日内瓦", "102C", "法国", "103D", "美国", "104E", "加拿大" ]; 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, ]; data | extend Floor_Code = split(Name, "_")[1] | lookup kind=leftouter location_dim on Floor_Code | summarize result = max(Value) by Floor_Name
提取编码时不建议用固定索引的
substring(Name,3,4),如果Name字段前缀长度发生变化会导致提取错误,用split(Name, "_")[1]直接按下划线分割取第二段的兼容性更强。
内容的提问来源于stack exchange,提问作者Noobie2021
相关产品推荐
相关产品推荐

