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

Kusto中view、materialize与materialized view差异及选型咨询

问题背景
  • 业务场景:Kusto 表数据每5小时执行一次增量更新(仅新增行,无修改、删除操作),开发需求为通过 .NET API 调用 Kusto 查询,查询逻辑需要先构建子查询,再将子查询结果与大表执行关联操作。
  • 现有两种子查询实现写法:
    第一种使用materialize()函数缓存子查询结果,代码如下:
    let table1=materialize(
    Customer|where CustomerId=="cust-reg-aabb-cc232"|distinct CustomerId,City);
    CustomerPurchase
    |where CustomerId=="cust-reg-aabb-cc232"
    // 执行与table1的关联及其他后续逻辑
    
    第二种使用view()定义内联视图,代码如下:
    let table1=view(){
    Customer|where CustomerId=="cust-reg-aabb-cc232"|distinct CustomerId,City};
    CustomerPurchase
    |where CustomerId=="cust-reg-aabb-cc232"
    // 执行table1与CustomerPurchase的关联逻辑
    
  • 待明确问题:
    1. 已知Customer、CustomerPurchase两张表均为5小时一次的仅新增更新模式,两种写法哪种查询性能更优,核心差异是什么?
    2. 在当前.NET API调用的业务场景下,是否可以使用 materialized view 替代上述子查询table1的实现?
解答

两种写法的核心差异与性能对比

先明确两个语法的实际执行逻辑:

  • view()定义的内联视图本质是查询片段的别名封装,不会自带任何缓存逻辑。查询执行时,每引用一次table1,封装在view里的过滤、去重逻辑就会完整执行一次。Kusto查询优化器不会自动缓存重复引用的子查询结果,不要依赖优化器自动做这层优化。
  • materialize()会在单次查询执行过程中,第一次计算到对应子查询时,就把结果缓存到查询节点的内存中,后续同个查询内所有引用table1的位置都会直接读取缓存结果,不会重复执行子查询计算。

针对你给出的示例代码,如果整个查询里table1仅被引用1次,两种写法性能没有本质差异;如果后续逻辑中会2次及以上引用table1,materialize()写法的性能会明显优于view()写法——尤其是你的子查询包含distinct这类计算开销不低的操作,重复计算带来的性能损耗会更明显。
注意:materialize()的缓存仅在单次查询的生命周期内生效,查询执行完成后缓存会立即释放,不支持跨查询复用结果,不要将其和跨查询的持久化预计算能力混淆。

materialized view 替代可行性

在你的业务场景下完全可以用materialized view替代手写子查询,且性能会更好:

  • 你的源表是仅新增的增量更新模式,完全适配materialized view的工作机制。materialized view会在后台自动做增量预计算,不需要每次API调用时实时执行子查询的过滤、去重逻辑,查询时直接读取预计算好的结果即可,延迟会比实时查询低很多。
  • 你的源表本身是5小时更新一次,而materialized view的增量同步延迟通常在秒到分钟级,远低于源表的更新周期,完全不会出现数据不一致的问题,数据新鲜度完全满足业务要求。
  • .NET API调用不需要做特殊适配,查询materialized view的写法和查询普通Kusto表完全一致。
  • 实操提示:如果你的业务场景中每次查询的CustomerId是动态传入的(不是固定写死的cust-reg-aabb-cc232),不要把固定ID的过滤条件写在materialized view定义里,建议定义全量维度的视图,查询时再根据传入的ID做过滤,依然能获得远优于实时计算的性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:31:11