[Fix](topn opt) only allow duplicate key or MOW model to use 2 phase read opt in nereids planner (#24485)

The fetch phase is not support aggregation at present
This commit is contained in:
lihangyu
2023-09-16 10:01:36 +08:00
committed by GitHub
parent 4dad7c94da
commit 81b6ab9b68
3 changed files with 84 additions and 0 deletions

View File

@ -60,6 +60,7 @@ public class DeferMaterializeTopNResult implements RewriteRuleFactory {
.when(r -> r.child().getOrderKeys().stream().map(OrderKey::getExpr)
.allMatch(Expression::isColumnFromTable))
.when(r -> r.child().child().getTable().getEnableLightSchemaChange())
.when(r -> r.child().child().getTable().isDupKeysOrMergeOnWrite())
.then(r -> deferMaterialize(r, r.child(), Optional.empty(), r.child().child()))
),
RuleType.DEFER_MATERIALIZE_TOP_N_RESULT.build(
@ -69,6 +70,7 @@ public class DeferMaterializeTopNResult implements RewriteRuleFactory {
.when(r -> r.child().getOrderKeys().stream().map(OrderKey::getExpr)
.allMatch(Expression::isColumnFromTable))
.when(r -> r.child().child().child().getTable().getEnableLightSchemaChange())
.when(r -> r.child().child().child().getTable().isDupKeysOrMergeOnWrite())
.then(r -> {
LogicalFilter<LogicalOlapScan> filter = r.child().child();
return deferMaterialize(r, r.child(), Optional.of(filter), filter.child());