如何使用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
相关产品推荐
相关产品推荐

