[功能请求][MPP] 为分析引擎添加运行时过滤器
作者: LantaoJin创建于 2026年9月16日更新于 2026年9月17日
标签enhancementSearch:Performance
**请描述您想要的解决方案** 从**独立的构建侧聚合**中生成过滤器,而不是从联合运算符中生成,这样就不需要联合和扫描共享一个进程。在主分发之前,在构建侧运行一个小的预先分析,将其联合键聚合为每个分片的一个固定大小的**布鲁姆**过滤器;在协调器上合并这些过滤器;然后将结果传递给探测侧生成器,作为执行指令,而计划本身只携带一个整数过滤器 ID。探测生成器对每一行进行过滤,并在它们进入混合之前丢弃不匹配的行,这正是节省的地方,这减少了混合和联合的量,而不是读取的字节数。引擎已经拥有大部分所需的部分:一种计划携带 ID / 值分离传递的约定,该约定目前用于谓词委托,一个在协调器侧运行任意阶段子树的独立阶段并捕获其输出,以及一个分片级预分发剪枝阶段。真正新的部分是一个可序列化的有良好定义的联合的负载,对于此负载,parquet 分块布鲁姆过滤器被重用,因此构建侧和探测侧不能在哈希函数或块布局上相互抵触。正确性规则,所有这些都拒绝而不是猜测:永远不要过滤联合保留的侧(外部,半内部,反向),永远不要将谓词移动到聚合,限制,联合或非内部联合的下方,以及永远不要应用一个其键列名解析为多个扫描的过滤器。一个假阳性会导致一行通过联合,而一个假陈述会丢失结果,因此每个联合都会拒绝大小不匹配而不是截断。
内容来源: opensearch-project/OpenSearch