Grafana中Azure Data Explorer数据源与静态源的数值映射
数字列映射为文本的实现方案
这里有几种可行的方式,根据你的映射维护需求和技术场景选择:
1. 在KQL查询中直接嵌入静态映射(最便捷)
如果映射关系固定且不需要单独维护,直接在Kusto查询里用字典映射是最快的方式:
// 定义静态映射字典 let itemMapping = dynamic({ "7000": "Apple", "7001": "Banana", "7002": "Orange" }); // 原查询关联映射 YourADXTable | project ItemId, // 将数字转字符串后匹配字典键,未匹配则显示"Unknown" ItemName = coalesce(itemMapping[tostring(ItemId)], "Unknown"), OtherColumnsYouNeed
2. 用Grafana的可视化层值映射
不想修改KQL的话,直接在Grafana面板里配置值映射:
- 编辑面板,切换到字段选项标签页
- 找到目标数字字段,点击值映射按钮
- 选择添加映射,手动输入键值对(如
7000→Apple),或者点击导入粘贴你的JSON映射内容(格式:{"7000":"Apple", "7001":"Banana"}) - 保存配置后,面板会自动替换数字为对应文本
3. 加载外部静态JSON文件(映射需单独维护)
如果映射关系存在外部静态JSON文件(比如放在内部静态服务上),用KQL的externaldata函数加载:
// 加载外部JSON映射 let itemMapping = externaldata(ItemId:string, ItemName:string) [h'http://your-static-host/mappings.json'] with(format = "json"); // 关联原表数据 YourADXTable | lookup itemMapping on $left.ItemId == $right.ItemId | project ItemId, ItemName, OtherColumnsYouNeed
外部JSON格式要求:
[{"ItemId": "7000", "ItemName": "Apple"}, {"ItemId": "7001", "ItemName": "Banana"}]
注意:ADX集群需要能访问该JSON文件的地址。
4. 调用外部API获取映射(动态更新场景)
如果映射来自API接口,用KQL的external_http函数调用并解析:
// 调用API获取映射数据 let apiResult = external_http( request_uri = "http://your-api-host/item-mappings", request_headers = dynamic({"Content-Type": "application/json"}) ); // 解析API返回的JSON为映射表 let itemMapping = apiResult.ResponseBody | parse_json | mv-expand mappings = ResponseBody // 根据API返回结构调整 | project ItemId = tostring(mappings.ItemId), ItemName = mappings.ItemName; // 关联原表数据 YourADXTable | lookup itemMapping on $left.ItemId == $right.ItemId | project ItemId, ItemName, OtherColumnsYouNeed
注意:需要确保ADX集群有调用外部API的权限,且API返回的JSON结构能被正确解析。
内容的提问来源于stack exchange,提问作者ADUCJ
相关产品推荐
相关产品推荐

