Skip to content

Commit f60047d

Browse files
committed
Add toggle for disabling table properties in predicate pushdown
1 parent bf98cbb commit f60047d

File tree

4 files changed

+34
-2
lines changed

4 files changed

+34
-2
lines changed

presto-main/src/main/java/io/prestosql/SystemSessionProperties.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ public final class SystemSessionProperties
117117
public static final String DEFAULT_FILTER_FACTOR_ENABLED = "default_filter_factor_enabled";
118118
public static final String UNWRAP_CASTS = "unwrap_casts";
119119
public static final String SKIP_REDUNDANT_SORT = "skip_redundant_sort";
120+
public static final String PREDICATE_PUSHDOWN_USE_TABLE_PROPERTIES = "predicate_pushdown_use_table_properties";
120121
public static final String WORK_PROCESSOR_PIPELINES = "work_processor_pipelines";
121122
public static final String ENABLE_DYNAMIC_FILTERING = "enable_dynamic_filtering";
122123
public static final String QUERY_MAX_MEMORY_PER_NODE = "query_max_memory_per_node";
@@ -506,6 +507,11 @@ public SystemSessionProperties(
506507
"Skip redundant sort operations",
507508
featuresConfig.isSkipRedundantSort(),
508509
false),
510+
booleanProperty(
511+
PREDICATE_PUSHDOWN_USE_TABLE_PROPERTIES,
512+
"Use table properties in predicate pushdown",
513+
featuresConfig.isPredicatePushdownUseTableProperties(),
514+
false),
509515
booleanProperty(
510516
WORK_PROCESSOR_PIPELINES,
511517
"Experimental: Use WorkProcessor pipelines",
@@ -921,6 +927,11 @@ public static boolean isSkipRedundantSort(Session session)
921927
return session.getSystemProperty(SKIP_REDUNDANT_SORT, Boolean.class);
922928
}
923929

930+
public static boolean isPredicatePushdownUseTableProperties(Session session)
931+
{
932+
return session.getSystemProperty(PREDICATE_PUSHDOWN_USE_TABLE_PROPERTIES, Boolean.class);
933+
}
934+
924935
public static boolean isWorkProcessorPipelines(Session session)
925936
{
926937
return session.getSystemProperty(WORK_PROCESSOR_PIPELINES, Boolean.class);

presto-main/src/main/java/io/prestosql/sql/analyzer/FeaturesConfig.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ public class FeaturesConfig
122122
private boolean optimizeTopNRowNumber = true;
123123
private boolean workProcessorPipelines;
124124
private boolean skipRedundantSort = true;
125+
private boolean predicatePushdownUseTableProperties = true;
125126

126127
private Duration iterativeOptimizerTimeout = new Duration(3, MINUTES); // by default let optimizer wait a long time in case it retrieves some data from ConnectorMetadata
127128
private boolean enableDynamicFiltering;
@@ -945,4 +946,16 @@ public FeaturesConfig setSkipRedundantSort(boolean value)
945946
this.skipRedundantSort = value;
946947
return this;
947948
}
949+
950+
public boolean isPredicatePushdownUseTableProperties()
951+
{
952+
return predicatePushdownUseTableProperties;
953+
}
954+
955+
@Config("optimizer.predicate-pushdown-use-table-properties")
956+
public FeaturesConfig setPredicatePushdownUseTableProperties(boolean predicatePushdownUseTableProperties)
957+
{
958+
this.predicatePushdownUseTableProperties = predicatePushdownUseTableProperties;
959+
return this;
960+
}
948961
}

presto-main/src/main/java/io/prestosql/sql/planner/optimizations/PredicatePushDown.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import static com.google.common.base.Preconditions.checkState;
8080
import static com.google.common.base.Verify.verify;
8181
import static io.prestosql.SystemSessionProperties.isEnableDynamicFiltering;
82+
import static io.prestosql.SystemSessionProperties.isPredicatePushdownUseTableProperties;
8283
import static io.prestosql.sql.DynamicFilters.createDynamicFilterExpression;
8384
import static io.prestosql.sql.ExpressionUtils.combineConjuncts;
8485
import static io.prestosql.sql.ExpressionUtils.extractConjuncts;
@@ -97,15 +98,15 @@ public class PredicatePushDown
9798
{
9899
private final Metadata metadata;
99100
private final LiteralEncoder literalEncoder;
100-
private final EffectivePredicateExtractor effectivePredicateExtractor;
101101
private final TypeAnalyzer typeAnalyzer;
102+
private final boolean useTableProperties;
102103

103104
public PredicatePushDown(Metadata metadata, TypeAnalyzer typeAnalyzer, boolean useTableProperties)
104105
{
105106
this.metadata = requireNonNull(metadata, "metadata is null");
106107
this.literalEncoder = new LiteralEncoder(metadata);
107-
this.effectivePredicateExtractor = new EffectivePredicateExtractor(new DomainTranslator(literalEncoder), metadata, useTableProperties);
108108
this.typeAnalyzer = requireNonNull(typeAnalyzer, "typeAnalyzer is null");
109+
this.useTableProperties = useTableProperties;
109110
}
110111

111112
@Override
@@ -116,6 +117,10 @@ public PlanNode optimize(PlanNode plan, Session session, TypeProvider types, Sym
116117
requireNonNull(types, "types is null");
117118
requireNonNull(idAllocator, "idAllocator is null");
118119

120+
EffectivePredicateExtractor effectivePredicateExtractor = new EffectivePredicateExtractor(
121+
new DomainTranslator(literalEncoder),
122+
metadata,
123+
useTableProperties && isPredicatePushdownUseTableProperties(session));
119124
return SimplePlanRewriter.rewriteWith(
120125
new Rewriter(symbolAllocator, idAllocator, metadata, literalEncoder, effectivePredicateExtractor, typeAnalyzer, session, types),
121126
plan,

presto-main/src/test/java/io/prestosql/sql/analyzer/TestFeaturesConfig.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@ public void testDefaults()
107107
.setMaxGroupingSets(2048)
108108
.setWorkProcessorPipelines(false)
109109
.setSkipRedundantSort(true)
110+
.setPredicatePushdownUseTableProperties(true)
110111
.setEnableDynamicFiltering(false)
111112
.setDynamicFilteringMaxPerDriverRowCount(100)
112113
.setDynamicFilteringMaxPerDriverSize(new DataSize(10, KILOBYTE)));
@@ -176,6 +177,7 @@ public void testExplicitPropertyMappings()
176177
.put("analyzer.max-grouping-sets", "2047")
177178
.put("experimental.work-processor-pipelines", "true")
178179
.put("optimizer.skip-redundant-sort", "false")
180+
.put("optimizer.predicate-pushdown-use-table-properties", "false")
179181
.put("experimental.enable-dynamic-filtering", "true")
180182
.put("experimental.dynamic-filtering-max-per-driver-row-count", "256")
181183
.put("experimental.dynamic-filtering-max-per-driver-size", "64kB")
@@ -242,6 +244,7 @@ public void testExplicitPropertyMappings()
242244
.setDefaultFilterFactorEnabled(true)
243245
.setWorkProcessorPipelines(true)
244246
.setSkipRedundantSort(false)
247+
.setPredicatePushdownUseTableProperties(false)
245248
.setEnableDynamicFiltering(true)
246249
.setDynamicFilteringMaxPerDriverRowCount(256)
247250
.setDynamicFilteringMaxPerDriverSize(new DataSize(64, KILOBYTE));

0 commit comments

Comments
 (0)