Skip to content

Commit

Permalink
[Enhancement] add switch enable_materialized_view_rewrite_for_insert …
Browse files Browse the repository at this point in the history
…(backport #37505) (#37711)

Co-authored-by: Murphy <[email protected]>
  • Loading branch information
mergify[bot] and murphyatwork authored Dec 25, 2023
1 parent 5e070c4 commit 2838952
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 8 deletions.
24 changes: 22 additions & 2 deletions fe/fe-core/src/main/java/com/starrocks/qe/SessionVariable.java
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,8 @@ public static MaterializedViewRewriteMode parse(String str) {
}
public static final String MATERIALIZED_VIEW_REWRITE_MODE = "materialized_view_rewrite_mode";

public static final String ENABLE_MATERIALIZED_VIEW_REWRITE_FOR_INSERT = "enable_materialized_view_for_insert";

public static final String ENABLE_RULE_BASED_MATERIALIZED_VIEW_REWRITE =
"enable_rule_based_materialized_view_rewrite";

Expand Down Expand Up @@ -965,6 +967,12 @@ public int getConnectorIoTasksPerScanOperator() {
@VarAttr(name = ENABLE_MATERIALIZED_VIEW_REWRITE)
private boolean enableMaterializedViewRewrite = true;

/**
* Whether enable materialized-view rewrite for INSERT statement
*/
@VarAttr(name = ENABLE_MATERIALIZED_VIEW_REWRITE_FOR_INSERT)
private boolean enableMaterializedViewRewriteForInsert = false;

@VarAttr(name = ENABLE_MATERIALIZED_VIEW_UNION_REWRITE)
private boolean enableMaterializedViewUnionRewrite = true;

Expand Down Expand Up @@ -1855,6 +1863,14 @@ public void setEnableMaterializedViewRewrite(boolean enableMaterializedViewRewri
this.enableMaterializedViewRewrite = enableMaterializedViewRewrite;
}

public boolean isEnableMaterializedViewRewriteForInsert() {
return enableMaterializedViewRewriteForInsert;
}

public void setEnableMaterializedViewRewriteForInsert(boolean value) {
this.enableMaterializedViewRewriteForInsert = value;
}

public boolean isEnableMaterializedViewUnionRewrite() {
return enableMaterializedViewUnionRewrite;
}
Expand Down Expand Up @@ -2211,7 +2227,11 @@ public void replayFromJson(String json) throws IOException {
}

@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException(e);
}
}
}
7 changes: 1 addition & 6 deletions fe/fe-core/src/main/java/com/starrocks/qe/VariableMgr.java
Original file line number Diff line number Diff line change
Expand Up @@ -235,12 +235,7 @@ private static boolean setValue(Object obj, Field field, String value) throws Dd
}

public static SessionVariable newSessionVariable() {
try {
return (SessionVariable) DEFAULT_SESSION_VARIABLE.clone();
} catch (CloneNotSupportedException e) {
LOG.warn(e);
}
return null;
return (SessionVariable) DEFAULT_SESSION_VARIABLE.clone();
}

// Check if this setVar can be set correctly
Expand Down
7 changes: 7 additions & 0 deletions fe/fe-core/src/main/java/com/starrocks/sql/InsertPlanner.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import com.starrocks.planner.OlapTableSink;
import com.starrocks.planner.PlanFragment;
import com.starrocks.qe.ConnectContext;
import com.starrocks.qe.SessionVariable;
import com.starrocks.sql.analyzer.AnalyzeState;
import com.starrocks.sql.analyzer.ExpressionAnalyzer;
import com.starrocks.sql.analyzer.Field;
Expand Down Expand Up @@ -115,16 +116,21 @@ public ExecPlan plan(InsertStmt insertStmt, ConnectContext session) {
logicalPlan = new LogicalPlan(optExprBuilder, outputColumns, logicalPlan.getCorrelation());

// TODO: remove forceDisablePipeline when all the operators support pipeline engine.
SessionVariable currentVariable = session.getSessionVariable();
boolean isEnablePipeline = session.getSessionVariable().isEnablePipelineEngine();
boolean canUsePipeline = isEnablePipeline && DataSink.canTableSinkUsePipeline(insertStmt.getTargetTable());
boolean forceDisablePipeline = isEnablePipeline && !canUsePipeline;
boolean prevIsEnableLocalShuffleAgg = session.getSessionVariable().isEnableLocalShuffleAgg();
boolean previousMVRewrite = currentVariable.isEnableMaterializedViewRewrite();
boolean enableMVRewrite = currentVariable.isEnableMaterializedViewRewriteForInsert() &&
currentVariable.isEnableMaterializedViewRewrite();
try (PlannerProfile.ScopedTimer ignore = PlannerProfile.getScopedTimer("InsertPlanner")) {
if (forceDisablePipeline) {
session.getSessionVariable().setEnablePipelineEngine(false);
}
// Non-query must use the strategy assign scan ranges per driver sequence, which local shuffle agg cannot use.
session.getSessionVariable().setEnableLocalShuffleAgg(false);
session.getSessionVariable().setEnableMaterializedViewRewrite(enableMVRewrite);

Optimizer optimizer = new Optimizer();
PhysicalPropertySet requiredPropertySet = createPhysicalPropertySet(insertStmt, outputColumns);
Expand Down Expand Up @@ -208,6 +214,7 @@ public ExecPlan plan(InsertStmt insertStmt, ConnectContext session) {
if (forceDisablePipeline) {
session.getSessionVariable().setEnablePipelineEngine(true);
}
session.getSessionVariable().setEnableMaterializedViewRewrite(previousMVRewrite);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,28 @@ public void testPlanCache() throws Exception {
}
}
}

@Test
public void testInsertMV() throws Exception {
String mvName = "mv_insert";
createAndRefreshMv("test", mvName, "create materialized view " + mvName +
" distributed by hash(v1) " +
"refresh async as " +
"select * from t0");
String sql = "insert into t0 select * from t0";

// enable
{
starRocksAssert.getCtx().getSessionVariable().setEnableMaterializedViewRewriteForInsert(true);
starRocksAssert.query(sql).explainContains(mvName);
}

// disable
{
starRocksAssert.getCtx().getSessionVariable().setEnableMaterializedViewRewriteForInsert(false);
starRocksAssert.query(sql).explainWithout(mvName);
}

starRocksAssert.getCtx().getSessionVariable().setEnableMaterializedViewRewriteForInsert(false);
}
}

0 comments on commit 2838952

Please sign in to comment.