Skip to content

Commit

Permalink
[Enhancement] Check table intersection early before rewriting PushDow…
Browse files Browse the repository at this point in the history
…n Agg when mv rewrite (StarRocks#51010)

Signed-off-by: kaijian.ding <[email protected]>
  • Loading branch information
kaijianding authored Sep 18, 2024
1 parent 4ae3caf commit 7cab4ae
Showing 1 changed file with 10 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -639,6 +639,13 @@ public AggRewriteInfo visitLogicalTableScan(OptExpression optExpression, AggRewr
logMVRewrite(mvRewriteContext, "Table scan node is invalid for push down");
return AggRewriteInfo.NOT_REWRITE;
}
List<Table> queryTables = MvUtils.getAllTables(optExpression);

final List<Table> mvTables = MvUtils.getAllTables(materializationContext.getMvExpression());
MatchMode matchMode = MaterializedViewRewriter.getMatchMode(queryTables, mvTables);
if (matchMode == MatchMode.NOT_MATCH && mvTables.stream().noneMatch(queryTables::contains)) {
return AggRewriteInfo.NOT_REWRITE;
}

// build group bys
List<ColumnRefOperator> groupBys = ctx.groupBys.values().stream()
Expand Down Expand Up @@ -679,7 +686,7 @@ public AggRewriteInfo visitLogicalTableScan(OptExpression optExpression, AggRewr
OptExpression optAggOp = OptExpression.create(newAggOp, optExpression);

// rewrite by mv.
OptExpression rewritten = doRewritePushDownAgg(ctx, optAggOp);
OptExpression rewritten = doRewritePushDownAgg(ctx, optAggOp, queryTables);
if (rewritten == null) {
logMVRewrite(mvRewriteContext, "Rewrite table scan node by mv failed");
return AggRewriteInfo.NOT_REWRITE;
Expand Down Expand Up @@ -717,8 +724,8 @@ public AggRewriteInfo visitLogicalTableScan(OptExpression optExpression, AggRewr
* @return: rewritten query plan if rewrite success, otherwise return null
*/
private OptExpression doRewritePushDownAgg(AggregatePushDownContext ctx,
OptExpression optExpression) {
List<Table> queryTables = MvUtils.getAllTables(optExpression);
OptExpression optExpression,
List<Table> queryTables) {
final ReplaceColumnRefRewriter queryColumnRefRewriter =
MvUtils.getReplaceColumnRefWriter(optExpression, queryColumnRefFactory);

Expand Down

0 comments on commit 7cab4ae

Please sign in to comment.