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

使用macro-expand与union从远程集群过滤数据的性能对比

Kusto跨集群查询性能与过滤逻辑分析

问题背景

针对分布在不同区域、各含数十亿行数据的10个集群,对比以下两种查询的性能差异及执行逻辑:

Query 1

union
    cluster('c0').database('Data').T,
    cluster('c1').database('Data').T,
    // ...
    cluster('c9').database('Data').T
| where Foo == "bar"

Query 2

macro-expand entity_group [
    cluster('c0').database('Data'),
    cluster('c1').database('Data'),
    // ...
    cluster('c9').database('Data')
] as X (
    X.T
    | where Foo == "bar"
)

问题解答

1. Query 1的执行逻辑

Query 1不会先把所有集群的全量数据传输到执行集群再过滤。Kusto的查询优化器会自动将where过滤逻辑下推到各个远程集群,每个远程集群会先在本地完成Foo == "bar"的过滤,只把符合条件的数据传输到执行集群做后续的union操作。

2. Query 2的执行逻辑理解确认

你的理解是正确的。macro-expand会把定义的实体组展开成对应每个集群的独立查询:每个远程集群都会执行X.T | where Foo == "bar"的逻辑,在本地完成过滤后,再将结果返回给执行集群。

3. 两种查询的性能差异

从执行逻辑和性能表现来看,这两种查询几乎没有差异。因为Query 1的过滤下推是Kusto优化器的默认行为,而Query 2通过macro-expand显式生成了每个集群的本地过滤查询,最终两者的执行路径是一致的——都是在远程集群本地过滤,仅传输少量符合条件的数据,而非全量数据。

唯一的区别可能是Query 2的写法更简洁,当集群数量较多时更容易维护,但性能层面不会有明显差距。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:57:05