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

如何使用now()、ago()等动态日期函数创建数据表?

能不能用now()、ago()这类动态日期函数创建Kusto数据表?

结论:不能直接在datatable的初始化字面量中使用now()、ago()这类动态日期函数,这不是语法错误,而是Kusto的规则限制——datatable的初始化数据必须是常量表达式,而now()、ago()属于运行时才会计算的动态表达式,无法在初始化阶段被解析为固定值。

你提供的可行代码之所以能运行,是因为用了datetime(2022-12-02 2:00:00.00)这类明确的常量日期值,符合datatable初始化的要求;而不可行的代码里直接在数组中使用now()、datetime(now()- ago(3h)),这些动态表达式无法被当作常量处理,因此会报错。

如果需要生成包含动态日期的数据表,可以换以下几种方式实现:

方法1:通过union拼接动态值

let Logs = datatable(timestamp: datetime) []
// 逐个拼接动态计算的日期行
union (datatable(timestamp: datetime) [now()])
union (datatable(timestamp: datetime) [now() - ago(3h)]);

方法2:用range生成批量动态时间(适合连续时间场景)

// 生成从3小时前到现在,步长3小时的时间序列
let Logs = range timestamp from now() - ago(3h) to now() step 3h;

方法3:借助materialize生成动态数据集

// 先计算动态日期值,再转为数据表
let dynamicDates = materialize(
    print timestamp = now() 
    union 
    print timestamp = now() - ago(3h)
);
let Logs = dynamicDates;

这些方法的核心是先在运行时完成动态日期的计算,再将结果注入到数据表中,绕过datatable初始化必须使用常量的限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 20:20:17