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

如何将GUID/唯一ID作为动态参数传入Kusto函数时保留其值

解决方案:保留Kusto中生成的GUID用于关联操作

问题根源在于Kusto的let语句默认是惰性求值:每次引用let定义的变量,都会重新执行一遍其对应的表达式。你代码里的data被引用了两次(一次直接输出data;,一次在生成scalar_events时),导致new_guid()被调用两次,生成了两组不同的GUID。

要解决这个问题,只需要用materialize()函数将data的结果物化,强制让表达式只执行一次,后续所有引用都复用同一组结果:

let x= datatable(EndTime:datetime, Event:string) [
    datetime(1910-06-11), "foo",
    datetime(1930-01-01), "bar",
    datetime(1930-01-01), "foo bar"
];
// 使用materialize()物化data,确保表达式只执行一次,GUID不会重复生成
let data = materialize(
    x
    | project EndTime, Event
    | extend Id = tostring(new_guid())
);
// 输出原始数据(含固定的GUID)
data;
// 基于物化后的data生成标量列表,GUID与原始数据完全一致
let scalar_events = toscalar(
    data
    | project scalar = pack_all()
    | summarize scalar = make_list(scalar)
);
print(scalar_events);

原理说明

materialize()会将查询结果临时存储起来,后续对data的任何引用都会直接读取这个存储好的结果,而不是重新执行x | extend Id = new_guid()这部分逻辑。这样new_guid()只会在物化时执行一次,所有场景下的GUID值都能保持一致,满足你后续关联操作的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 10:43:20