在左侧联合的情况下执行 `RIGHT JOIN`: 平行副本会抛出 LOGICAL_ERROR
作者: clickgapai创建于 2026年9月17日更新于 2026年9月17日
标签comp-parallel-replicas
分析细节(证据、受影响的位置、影响) **为什么我们认为这是一个 bug:** `buildQueryPlanForParallelReplicas` ([`src/Planner/findParallelReplicasQuery.cpp:627`](https://ZZTERM6ZZ.com/ClickHouse/ClickHouse/blob/2d19d1b6e073/src/Planner/findParallelReplicasQuery.cpp#L627)) -> `rewriteJoinToGlobalJoin` -> `RewriteJoinToGlobalJoinVisitor::enterImpl` ([`src/Storages/buildQueryTreeForShard.cpp:1158`](https://ZZTERM7ZZ.com/ClickHouse/ClickHouse/blob/2d19d1b6e073/src/Storages/buildQueryTreeForShard.cpp#L1158)) -> `materializedSideCanStayLocal` (:1122), 通过 `getMaterializedTableExpressionNode` (:85-91) 现在检查 `RIGHT JOIN` 的 LEFT 表达式; 如果存储不合格,则返回 false,因此将该连接标记为 `JoinLocality::Global` -> `buildQueryTreeForShard` (:953-956) 将 `getLeftTableExpressionNodeTyped()` 作为要物化的侧 -> `getSubqueryFromTableExpression` (:787-790) 会抛出错误,因为 `JoinNode` 不是 TABLE / TABLE_FUNCTION / QUERY / UNION / ARRAY_JOIN。
内容来源: ClickHouse/ClickHouse