Skip to content

Commit

Permalink
Always show stats in query plan for EXPLAIN query
Browse files Browse the repository at this point in the history
Session property print_stats_for_non_join_query is only valid for non-Explain query.
  • Loading branch information
viczhang861 authored and Vic Zhang committed Mar 8, 2019
1 parent cc21c5a commit 3199fb5
Show file tree
Hide file tree
Showing 5 changed files with 18 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,7 @@ private PlanRoot doAnalyzeQuery()

// plan query
PlanNodeIdAllocator idAllocator = new PlanNodeIdAllocator();
LogicalPlanner logicalPlanner = new LogicalPlanner(stateMachine.getSession(), planOptimizers, idAllocator, metadata, sqlParser, statsCalculator, costCalculator, stateMachine.getWarningCollector());
LogicalPlanner logicalPlanner = new LogicalPlanner(false, stateMachine.getSession(), planOptimizers, idAllocator, metadata, sqlParser, statsCalculator, costCalculator, stateMachine.getWarningCollector());
Plan plan = logicalPlanner.plan(analysis);
queryPlan.set(plan);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@ public Plan getLogicalPlan(Session session, Statement statement, List<Expression
PlanNodeIdAllocator idAllocator = new PlanNodeIdAllocator();

// plan statement
LogicalPlanner logicalPlanner = new LogicalPlanner(session, planOptimizers, idAllocator, metadata, sqlParser, statsCalculator, costCalculator, warningCollector);
LogicalPlanner logicalPlanner = new LogicalPlanner(true, session, planOptimizers, idAllocator, metadata, sqlParser, statsCalculator, costCalculator, warningCollector);
return logicalPlanner.plan(analysis);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,8 +112,8 @@ public enum Stage
CREATED, OPTIMIZED, OPTIMIZED_AND_VALIDATED
}

private final boolean explain;
private final PlanNodeIdAllocator idAllocator;

private final Session session;
private final List<PlanOptimizer> planOptimizers;
private final PlanSanityChecker planSanityChecker;
Expand All @@ -125,7 +125,9 @@ public enum Stage
private final CostCalculator costCalculator;
private final WarningCollector warningCollector;

public LogicalPlanner(Session session,
public LogicalPlanner(
boolean explain,
Session session,
List<PlanOptimizer> planOptimizers,
PlanNodeIdAllocator idAllocator,
Metadata metadata,
Expand All @@ -134,10 +136,12 @@ public LogicalPlanner(Session session,
CostCalculator costCalculator,
WarningCollector warningCollector)
{
this(session, planOptimizers, DISTRIBUTED_PLAN_SANITY_CHECKER, idAllocator, metadata, sqlParser, statsCalculator, costCalculator, warningCollector);
this(explain, session, planOptimizers, DISTRIBUTED_PLAN_SANITY_CHECKER, idAllocator, metadata, sqlParser, statsCalculator, costCalculator, warningCollector);
}

public LogicalPlanner(Session session,
public LogicalPlanner(
boolean explain,
Session session,
List<PlanOptimizer> planOptimizers,
PlanSanityChecker planSanityChecker,
PlanNodeIdAllocator idAllocator,
Expand All @@ -147,6 +151,7 @@ public LogicalPlanner(Session session,
CostCalculator costCalculator,
WarningCollector warningCollector)
{
this.explain = explain;
this.session = requireNonNull(session, "session is null");
this.planOptimizers = requireNonNull(planOptimizers, "planOptimizers is null");
this.planSanityChecker = requireNonNull(planSanityChecker, "planSanityChecker is null");
Expand Down Expand Up @@ -188,7 +193,7 @@ public Plan plan(Analysis analysis, Stage stage)

private StatsAndCosts computeStats(PlanNode root, TypeProvider types)
{
if (isPrintStatsForNonJoinQuery(session) ||
if (explain || isPrintStatsForNonJoinQuery(session) ||
PlanNodeSearcher.searchFrom(root).where(node ->
(node instanceof JoinNode) || (node instanceof SemiJoinNode)).matches()) {
StatsProvider statsProvider = new CachingStatsProvider(statsCalculator, session, types);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@
import com.facebook.presto.sql.tree.Deallocate;
import com.facebook.presto.sql.tree.DropTable;
import com.facebook.presto.sql.tree.DropView;
import com.facebook.presto.sql.tree.Explain;
import com.facebook.presto.sql.tree.Prepare;
import com.facebook.presto.sql.tree.RenameColumn;
import com.facebook.presto.sql.tree.RenameTable;
Expand Down Expand Up @@ -828,7 +829,8 @@ public Plan createPlan(Session session, @Language("SQL") String sql, List<PlanOp

public Plan createPlan(Session session, @Language("SQL") String sql, List<PlanOptimizer> optimizers, LogicalPlanner.Stage stage, WarningCollector warningCollector)
{
PreparedQuery preparedQuery = new QueryPreparer(sqlParser).prepareQuery(session, sql);
Statement wrappedStatement = sqlParser.createStatement(sql, createParsingOptions(session));
PreparedQuery preparedQuery = new QueryPreparer(sqlParser).prepareQuery(session, wrappedStatement);

assertFormattedSql(sqlParser, createParsingOptions(session), preparedQuery.getStatement());

Expand All @@ -845,7 +847,7 @@ public Plan createPlan(Session session, @Language("SQL") String sql, List<PlanOp
dataDefinitionTask);
Analyzer analyzer = new Analyzer(session, metadata, sqlParser, accessControl, Optional.of(queryExplainer), preparedQuery.getParameters(), warningCollector);

LogicalPlanner logicalPlanner = new LogicalPlanner(session, optimizers, new PlanSanityChecker(true), idAllocator, metadata, sqlParser, statsCalculator, costCalculator, warningCollector);
LogicalPlanner logicalPlanner = new LogicalPlanner(wrappedStatement instanceof Explain, session, optimizers, new PlanSanityChecker(true), idAllocator, metadata, sqlParser, statsCalculator, costCalculator, warningCollector);

Analysis analysis = analyzer.analyze(preparedQuery.getStatement());
return logicalPlanner.plan(analysis, stage);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;

import static com.facebook.presto.SystemSessionProperties.PRINT_STATS_FOR_NON_JOIN_QUERY;
import static com.facebook.presto.testing.TestingSession.testSessionBuilder;
import static com.facebook.presto.tests.statistics.MetricComparisonStrategies.absoluteError;
import static com.facebook.presto.tests.statistics.MetricComparisonStrategies.defaultTolerance;
Expand All @@ -40,6 +41,7 @@ public void setUp()
Session defaultSession = testSessionBuilder()
.setCatalog("tpcds")
.setSchema("sf1")
.setSystemProperty(PRINT_STATS_FOR_NON_JOIN_QUERY, "true")
.build();

LocalQueryRunner queryRunner = new LocalQueryRunner(defaultSession);
Expand Down

0 comments on commit 3199fb5

Please sign in to comment.