Skip to content

Commit

Permalink
Add runtime stats for cases in materialized view
Browse files Browse the repository at this point in the history
  • Loading branch information
jainxrohit authored and highker committed Mar 26, 2022
1 parent 199d70c commit 96b4eb8
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -331,9 +332,7 @@ public Scope process(Node node, Optional<Scope> 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;
}

Expand Down Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
{
Expand All @@ -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;
}
}
Expand All @@ -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) {
Expand Down

0 comments on commit 96b4eb8

Please sign in to comment.