diff --git a/presto-common/src/main/java/com/facebook/presto/common/RuntimeMetricName.java b/presto-common/src/main/java/com/facebook/presto/common/RuntimeMetricName.java index 2e552f54c4ae1..3ea42d7b848bb 100644 --- a/presto-common/src/main/java/com/facebook/presto/common/RuntimeMetricName.java +++ b/presto-common/src/main/java/com/facebook/presto/common/RuntimeMetricName.java @@ -26,7 +26,9 @@ private RuntimeMetricName() public static final String DRIVER_COUNT_PER_TASK = "driverCountPerTask"; public static final String TASK_ELAPSED_TIME_NANOS = "taskElapsedTimeNanos"; - public static final String OPTIMIZED_WITH_MATERIALIZED_VIEW = "optimizedWithMaterializedView"; + public static final String OPTIMIZED_WITH_MATERIALIZED_VIEW_COUNT = "optimizedWithMaterializedViewCount"; + public static final String MANY_PARTITIONS_MISSING_IN_MATERIALIZED_VIEW_COUNT = "manyPartitionsMissingInMaterializedViewCount"; + public static final String SKIP_READING_FROM_MATERIALIZED_VIEW_COUNT = "skipReadingFromMaterializedViewCount"; public static final String FRAGMENT_RESULT_CACHE_HIT = "fragmentResultCacheHitCount"; public static final String FRAGMENT_RESULT_CACHE_MISS = "fragmentResultCacheMissCount"; public static final String GET_VIEW_TIME_NANOS = "getViewTimeNanos"; diff --git a/presto-main/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java b/presto-main/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java index c0453e6940e08..cf1997eebde6e 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/analyzer/StatementAnalyzer.java @@ -176,6 +176,7 @@ import static com.facebook.presto.common.RuntimeMetricName.GET_TABLE_HANDLE_TIME_NANOS; import static com.facebook.presto.common.RuntimeMetricName.GET_TABLE_METADATA_TIME_NANOS; import static com.facebook.presto.common.RuntimeMetricName.GET_VIEW_TIME_NANOS; +import static com.facebook.presto.common.RuntimeMetricName.SKIP_READING_FROM_MATERIALIZED_VIEW_COUNT; import static com.facebook.presto.common.type.BigintType.BIGINT; import static com.facebook.presto.common.type.BooleanType.BOOLEAN; import static com.facebook.presto.common.type.TypeSignature.parseTypeSignature; @@ -331,9 +332,7 @@ public Scope process(Node node, Optional scope) { Scope returnScope = super.process(node, scope); checkState(returnScope.getOuterQueryParent().equals(outerQueryScope), "result scope should have outer query scope equal with parameter outer query scope"); - if (scope.isPresent()) { - checkState(hasScopeAsLocalParent(returnScope, scope.get()), "return scope should have context scope as one of ancestors"); - } + scope.ifPresent(value -> checkState(hasScopeAsLocalParent(returnScope, value), "return scope should have context scope as one of ancestors")); return returnScope; } @@ -1379,6 +1378,7 @@ private String getMaterializedViewSQL( String materializedViewCreateSql = connectorMaterializedViewDefinition.getOriginalSql(); if (materializedViewStatus.isNotMaterialized() || materializedViewStatus.isTooManyPartitionsMissing()) { + session.getRuntimeStats().addMetricValue(SKIP_READING_FROM_MATERIALIZED_VIEW_COUNT, 1); return materializedViewCreateSql; } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/rewrite/MaterializedViewOptimizationRewriteUtils.java b/presto-main/src/main/java/com/facebook/presto/sql/rewrite/MaterializedViewOptimizationRewriteUtils.java index 81ea4cdbff57e..1802a6ef01f0f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/rewrite/MaterializedViewOptimizationRewriteUtils.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/rewrite/MaterializedViewOptimizationRewriteUtils.java @@ -31,7 +31,9 @@ import java.util.Set; import static com.facebook.presto.SystemSessionProperties.isMaterializedViewDataConsistencyEnabled; -import static com.facebook.presto.common.RuntimeMetricName.OPTIMIZED_WITH_MATERIALIZED_VIEW; +import static com.facebook.presto.common.RuntimeMetricName.MANY_PARTITIONS_MISSING_IN_MATERIALIZED_VIEW_COUNT; +import static com.facebook.presto.common.RuntimeMetricName.OPTIMIZED_WITH_MATERIALIZED_VIEW_COUNT; +import static com.facebook.presto.sql.ParsingUtil.createParsingOptions; public class MaterializedViewOptimizationRewriteUtils { @@ -58,12 +60,15 @@ public static Query optimizeQueryUsingMaterializedView( //TODO: We should be able to leverage this information in the StatementAnalyzer as well. MaterializedViewStatus materializedViewStatus = metadata.getMaterializedViewStatus(session, candidate); if (materializedViewStatus.isFullyMaterialized() || materializedViewStatus.isPartiallyMaterialized()) { - session.getRuntimeStats().addMetricValue(OPTIMIZED_WITH_MATERIALIZED_VIEW, 1); + session.getRuntimeStats().addMetricValue(OPTIMIZED_WITH_MATERIALIZED_VIEW_COUNT, 1); return optimizedQuery; } + else { + session.getRuntimeStats().addMetricValue(MANY_PARTITIONS_MISSING_IN_MATERIALIZED_VIEW_COUNT, 1); + } } else { - session.getRuntimeStats().addMetricValue(OPTIMIZED_WITH_MATERIALIZED_VIEW, 1); + session.getRuntimeStats().addMetricValue(OPTIMIZED_WITH_MATERIALIZED_VIEW_COUNT, 1); return optimizedQuery; } } @@ -83,7 +88,7 @@ private static Query getQueryWithMaterializedViewOptimization( ConnectorMaterializedViewDefinition materializedView = metadata.getMaterializedView(session, materializedViewQualifiedObjectName).get(); Table materializedViewTable = new Table(QualifiedName.of(materializedView.getTable())); - Query materializedViewDefinition = (Query) sqlParser.createStatement(materializedView.getOriginalSql()); + Query materializedViewDefinition = (Query) sqlParser.createStatement(materializedView.getOriginalSql(), createParsingOptions(session)); return (Query) new MaterializedViewQueryOptimizer(metadata, session, sqlParser, accessControl, new RowExpressionDomainTranslator(metadata), materializedViewTable, materializedViewDefinition).rewrite(statement); } catch (RuntimeException ex) {