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

如何在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.Language NuGet包(可通过NuGet包管理器搜索安装)
  • 该方案支持绝大多数KQL语法场景,包括union、join、子查询、跨库引用等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 03:57:21