如何在C#中提取KQL查询所使用的所有表名并存入列表?
提取KQL查询中的表名(C#实现)
你当前的代码调用parseCode.ResultType只能获取查询结果的列结构,无法拿到查询依赖的表名。要提取表名,需要遍历KQL的语法树,定位到所有表引用节点。
以下是可行的实现代码:
using Kusto.Language; using Kusto.Language.Syntax; using System.Collections.Generic; using System.Linq; var query = @"Table1 | project a, b, c; Table2 | join Table3 on Id | summarize count()"; var code = KustoCode.Parse(query); var tableNames = new List<string>(); // 遍历语法树,收集所有表引用节点 code.Syntax.Walk(node => { if (node is TableReference tableRef) { var fullTableName = tableRef.Name.GetFullName(); if (!tableNames.Contains(fullTableName)) { tableNames.Add(fullTableName); } } }); // 输出所有表名 foreach (var name in tableNames) { Console.WriteLine(name); }
代码说明
- 使用
Syntax.Walk遍历整个KQL语法树,覆盖所有嵌套结构(比如子查询、join中的表引用) - 筛选
TableReference类型节点,这类节点对应查询中直接或间接引用的表 GetFullName()方法可提取完整表名,支持带数据库/集群前缀的场景(如MyDb.MyTable)- 加入去重逻辑,避免同一表名被多次添加
注意事项
- 确保项目已安装
Kusto.LanguageNuGet包(可通过NuGet包管理器搜索安装) - 该方案支持绝大多数KQL语法场景,包括union、join、子查询、跨库引用等
内容的提问来源于stack exchange,提问作者Tehila
相关产品推荐
相关产品推荐

