diff --git a/presto-main/src/main/java/com/facebook/presto/cost/CachingCostProvider.java b/presto-main/src/main/java/com/facebook/presto/cost/CachingCostProvider.java index 90754efa3f83f..a56cecddffd47 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/CachingCostProvider.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/CachingCostProvider.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.Optional; +import static com.facebook.presto.SystemSessionProperties.isEnableStatsCalculator; import static com.google.common.base.Verify.verify; import static java.util.Objects.requireNonNull; @@ -54,6 +55,10 @@ public CachingCostProvider(CostCalculator costCalculator, StatsProvider statsPro @Override public PlanNodeCostEstimate getCumulativeCost(PlanNode node) { + if (!isEnableStatsCalculator(session)) { + return PlanNodeCostEstimate.unknown(); + } + requireNonNull(node, "node is null"); if (node instanceof GroupReference) { diff --git a/presto-main/src/main/java/com/facebook/presto/sql/analyzer/FeaturesConfig.java b/presto-main/src/main/java/com/facebook/presto/sql/analyzer/FeaturesConfig.java index bc50fb7619cad..00fee56ccdce9 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/analyzer/FeaturesConfig.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/analyzer/FeaturesConfig.java @@ -107,7 +107,7 @@ public class FeaturesConfig private int spillerThreads = 4; private double spillMaxUsedSpaceThreshold = 0.9; private boolean iterativeOptimizerEnabled = true; - private boolean enableStatsCalculator = true; + private boolean enableStatsCalculator; private boolean pushAggregationThroughJoin = true; private double memoryRevokingTarget = 0.5; private double memoryRevokingThreshold = 0.9; diff --git a/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java b/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java index 230ad442bd513..fa353bfc4d50d 100644 --- a/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java +++ b/presto-main/src/test/java/com/facebook/presto/cost/TestCostCalculator.java @@ -70,6 +70,7 @@ import java.util.Optional; import java.util.function.Function; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.cost.PlanNodeCostEstimate.cpuCost; import static com.facebook.presto.metadata.FunctionKind.AGGREGATE; import static com.facebook.presto.metadata.MetadataManager.createTestMetadataManager; @@ -116,7 +117,10 @@ public void setUp() costCalculatorWithEstimatedExchanges = new CostCalculatorWithEstimatedExchanges(costCalculatorUsingExchanges, () -> NUMBER_OF_NODES); planFragmenter = new PlanFragmenter(new QueryManagerConfig()); - session = testSessionBuilder().setCatalog("tpch").build(); + session = testSessionBuilder() + .setCatalog("tpch") + .setSystemProperty(ENABLE_STATS_CALCULATOR, "true") + .build(); CatalogManager catalogManager = new CatalogManager(); catalogManager.registerCatalog(createBogusTestingCatalog("tpch")); diff --git a/presto-main/src/test/java/com/facebook/presto/cost/TestStatsCalculator.java b/presto-main/src/test/java/com/facebook/presto/cost/TestStatsCalculator.java index 0ebb04820d9ef..7ce1690c94be9 100644 --- a/presto-main/src/test/java/com/facebook/presto/cost/TestStatsCalculator.java +++ b/presto-main/src/test/java/com/facebook/presto/cost/TestStatsCalculator.java @@ -24,6 +24,7 @@ import com.google.common.collect.ImmutableMap; import org.testng.annotations.Test; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.anyTree; import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.node; import static com.facebook.presto.testing.TestingSession.testSessionBuilder; @@ -37,6 +38,7 @@ public TestStatsCalculator() this.queryRunner = new LocalQueryRunner(testSessionBuilder() .setCatalog("local") .setSchema("tiny") + .setSystemProperty(ENABLE_STATS_CALCULATOR, "true") .setSystemProperty("task_concurrency", "1") // these tests don't handle exchanges from local parallel .build()); diff --git a/presto-main/src/test/java/com/facebook/presto/sql/analyzer/TestFeaturesConfig.java b/presto-main/src/test/java/com/facebook/presto/sql/analyzer/TestFeaturesConfig.java index 2306073e754b0..d492640d56e12 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/analyzer/TestFeaturesConfig.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/analyzer/TestFeaturesConfig.java @@ -85,7 +85,7 @@ public void testDefaults() .setLegacyLogFunction(false) .setIterativeOptimizerEnabled(true) .setIterativeOptimizerTimeout(new Duration(3, MINUTES)) - .setEnableStatsCalculator(true) + .setEnableStatsCalculator(false) .setExchangeCompressionEnabled(false) .setLegacyTimestamp(true) .setLegacyRowFieldOrdinalAccess(false) @@ -117,7 +117,7 @@ public void testExplicitPropertyMappings() .put("network-cost-weight", "0.2") .put("experimental.iterative-optimizer-enabled", "false") .put("experimental.iterative-optimizer-timeout", "10s") - .put("experimental.enable-stats-calculator", "false") + .put("experimental.enable-stats-calculator", "true") .put("deprecated.legacy-array-agg", "true") .put("deprecated.legacy-log-function", "true") .put("deprecated.group-by-uses-equal", "true") @@ -178,7 +178,7 @@ public void testExplicitPropertyMappings() .setNetworkCostWeight(0.2) .setIterativeOptimizerEnabled(false) .setIterativeOptimizerTimeout(new Duration(10, SECONDS)) - .setEnableStatsCalculator(false) + .setEnableStatsCalculator(true) .setDistributedIndexJoinsEnabled(true) .setJoinDistributionType(BROADCAST) .setJoinMaxBroadcastTableSize(new DataSize(42, GIGABYTE)) diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java index 26cd95d78d3f1..0ff1d07602042 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java @@ -32,6 +32,7 @@ import java.util.Optional; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; import static com.facebook.presto.SystemSessionProperties.JOIN_MAX_BROADCAST_TABLE_SIZE; import static com.facebook.presto.spi.type.BigintType.BIGINT; @@ -58,7 +59,10 @@ public class TestDetermineJoinDistributionType @BeforeClass public void setUp() { - tester = new RuleTester(ImmutableList.of(), ImmutableMap.of(), Optional.of(4)); + tester = new RuleTester( + ImmutableList.of(), + ImmutableMap.of(ENABLE_STATS_CALCULATOR, "true"), + Optional.of(4)); } @AfterClass(alwaysRun = true) diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestReorderJoins.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestReorderJoins.java index 7511f1a48b684..50edf7c8f5679 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestReorderJoins.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestReorderJoins.java @@ -37,6 +37,7 @@ import java.util.List; import java.util.Optional; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; import static com.facebook.presto.SystemSessionProperties.JOIN_MAX_BROADCAST_TABLE_SIZE; import static com.facebook.presto.SystemSessionProperties.JOIN_REORDERING_STRATEGY; @@ -66,7 +67,8 @@ public void setUp() ImmutableList.of(), ImmutableMap.of( JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name(), - JOIN_REORDERING_STRATEGY, JoinReorderingStrategy.AUTOMATIC.name()), + JOIN_REORDERING_STRATEGY, JoinReorderingStrategy.AUTOMATIC.name(), + ENABLE_STATS_CALCULATOR, "true"), Optional.of(4)); } diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpchCostBasedPlan.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpchCostBasedPlan.java index 7ba278fd0ee0e..173dc6e9f388d 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpchCostBasedPlan.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpchCostBasedPlan.java @@ -25,6 +25,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; import static com.facebook.presto.SystemSessionProperties.JOIN_REORDERING_STRATEGY; import static com.facebook.presto.testing.TestingSession.testSessionBuilder; @@ -53,6 +54,7 @@ public TestTpchCostBasedPlan() .setCatalog(catalog) .setSchema("sf3000.0") .setSystemProperty("task_concurrency", "1") // these tests don't handle exchanges from local parallel + .setSystemProperty(ENABLE_STATS_CALCULATOR, "true") .setSystemProperty(JOIN_REORDERING_STRATEGY, JoinReorderingStrategy.AUTOMATIC.name()) .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()); diff --git a/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchDistributedStats.java b/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchDistributedStats.java index 9f4dc98603c53..02b6056e0e2b6 100644 --- a/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchDistributedStats.java +++ b/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchDistributedStats.java @@ -22,6 +22,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.SystemSessionProperties.PREFER_PARTITIAL_AGGREGATION; import static com.facebook.presto.tests.statistics.MetricComparisonStrategies.absoluteError; import static com.facebook.presto.tests.statistics.MetricComparisonStrategies.defaultTolerance; @@ -41,7 +42,9 @@ public void setup() { DistributedQueryRunner runner = TpchQueryRunnerBuilder.builder() // We are not able to calculate stats for PARTIAL aggregations - .amendSession(builder -> builder.setSystemProperty(PREFER_PARTITIAL_AGGREGATION, "false")) + .amendSession(builder -> builder + .setSystemProperty(ENABLE_STATS_CALCULATOR, "true") + .setSystemProperty(PREFER_PARTITIAL_AGGREGATION, "false")) .buildWithoutCatalogs(); runner.createCatalog( "tpch", diff --git a/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java b/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java index c4f133c9b9986..094d9efd4aa50 100644 --- a/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java +++ b/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java @@ -23,6 +23,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.SystemSessionProperties.PREFER_PARTITIAL_AGGREGATION; import static com.facebook.presto.testing.TestingSession.testSessionBuilder; import static com.facebook.presto.tests.statistics.MetricComparisonStrategies.absoluteError; @@ -48,6 +49,7 @@ public void setUp() .setCatalog("tpch") .setSchema(TINY_SCHEMA_NAME) // We are not able to calculate stats for PARTIAL aggregations + .setSystemProperty(ENABLE_STATS_CALCULATOR, "true") .setSystemProperty(PREFER_PARTITIAL_AGGREGATION, "false") .build(); diff --git a/presto-tpcds/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpcdsCostBasedPlan.java b/presto-tpcds/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpcdsCostBasedPlan.java index e1e9a2c654dc3..877e8d5a32ab9 100644 --- a/presto-tpcds/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpcdsCostBasedPlan.java +++ b/presto-tpcds/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpcdsCostBasedPlan.java @@ -24,6 +24,7 @@ import java.util.stream.IntStream; import java.util.stream.Stream; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; import static com.facebook.presto.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; import static com.facebook.presto.SystemSessionProperties.JOIN_REORDERING_STRATEGY; import static com.facebook.presto.testing.TestingSession.testSessionBuilder; @@ -51,6 +52,7 @@ public TestTpcdsCostBasedPlan() .setCatalog(catalog) .setSchema("sf3000.0") .setSystemProperty("task_concurrency", "1") // these tests don't handle exchanges from local parallel + .setSystemProperty(ENABLE_STATS_CALCULATOR, "true") .setSystemProperty(JOIN_REORDERING_STRATEGY, JoinReorderingStrategy.AUTOMATIC.name()) .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()); diff --git a/presto-tpcds/src/test/java/com/facebook/presto/tpcds/statistics/TestTpcdsLocalStats.java b/presto-tpcds/src/test/java/com/facebook/presto/tpcds/statistics/TestTpcdsLocalStats.java index 0b05b1717872d..68748a8073482 100644 --- a/presto-tpcds/src/test/java/com/facebook/presto/tpcds/statistics/TestTpcdsLocalStats.java +++ b/presto-tpcds/src/test/java/com/facebook/presto/tpcds/statistics/TestTpcdsLocalStats.java @@ -21,6 +21,7 @@ import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; +import static com.facebook.presto.SystemSessionProperties.ENABLE_STATS_CALCULATOR; 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; @@ -40,6 +41,7 @@ public void setUp() Session defaultSession = testSessionBuilder() .setCatalog("tpcds") .setSchema("sf1") + .setSystemProperty(ENABLE_STATS_CALCULATOR, "true") .build(); LocalQueryRunner queryRunner = new LocalQueryRunner(defaultSession);