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

