You need to enable JavaScript to run this app. 如何在Kusto中创建datatable时使用用户自定义标量
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kusto中创建datatable时使用用户自定义标量

预先定义标量变量后应用到datatable的实现方法

KQL 中 datatable 的内置字面量填充数组仅支持传入常量值,不允许直接引用预先定义的 let 标量变量,直接在数组位置写变量名会触发解析报错。要实现该需求可使用以下三种常用方案,按简洁度排序:

方法1:直接条件赋值法(最简洁)

如果可以通过datatable本身的列值判断需要匹配的变量,直接用extend结合条件函数赋值即可,示例代码:

let dayOne = "Day One";
let dayTwo = "Day Two";
let dayStringMapping = datatable(Batch: int64, BatchDay: string)
    [   
    1, "",
    2, ""
    ]
// 用现有列Batch做条件,直接赋值对应标量变量
| extend BatchDay = case(Batch == 1, dayOne, Batch == 2, dayTwo, "");
dayStringMapping

方法2:占位符替换法

如果需要替换的位置无法通过现有列判断,可先给datatable写入临时占位符字符串,再批量替换为预先定义的标量值,示例代码:

let dayOne = "Day One";
let dayTwo = "Day Two";
// 先定义datatable结构,需替换位置写入固定占位符
let rawDatatable = datatable(Batch: int64, BatchDay: string)
    [   
    1, "__PLACEHOLDER_1__",
    2, "__PLACEHOLDER_2__"
    ];
// 批量替换占位符为预先定义的标量值
let dayStringMapping = rawDatatable
| extend BatchDay = case(
    BatchDay == "__PLACEHOLDER_1__", dayOne,
    BatchDay == "__PLACEHOLDER_2__", dayTwo,
    BatchDay
);
dayStringMapping

方法3:交叉连接赋值法

先把标量变量通过print转成单行小表,和datatable做交叉连接后,将对应变量值赋值给目标列,适合变量数量较多的映射场景,示例代码:

let dayOne = "Day One";
let dayTwo = "Day Two";
// 将标量变量转为单行小表
let scalarMapping = print d1 = dayOne, d2 = dayTwo;
// 定义datatable结构后交叉连接小表,赋值目标列
let dayStringMapping = datatable(Batch: int64, BatchDay: string)
    [   
    1, "",
    2, ""
    ]
| evaluate cross_join(scalarMapping)
| project Batch, BatchDay = case(Batch == 1, d1, Batch == 2, d2);
dayStringMapping

场景适配说明

  • 可通过现有列判断映射关系时优先用方法1,性能和简洁度最优
  • 映射规则和现有列无关时优先用方法2,维护成本更低
  • 批量映射大量标量时可选用方法3,减少重复条件判断的代码量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.02 23:27:00