diff --git a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/AbstractCostBasedPlanTest.java b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/AbstractCostBasedPlanTest.java index 1ce4721d9..d611fa15c 100644 --- a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/AbstractCostBasedPlanTest.java +++ b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/AbstractCostBasedPlanTest.java @@ -22,6 +22,8 @@ import io.prestosql.plugin.tpcds.TpcdsTableHandle; import io.prestosql.plugin.tpch.TpchTableHandle; import io.prestosql.spi.connector.ConnectorTableHandle; import io.prestosql.spi.plan.AggregationNode; +import io.prestosql.spi.plan.CTEScanNode; +import io.prestosql.spi.plan.FilterNode; import io.prestosql.spi.plan.JoinNode; import io.prestosql.spi.plan.TableScanNode; import io.prestosql.spi.plan.ValuesNode; @@ -56,11 +58,13 @@ public abstract class AbstractCostBasedPlanTest extends BasePlanTest { private final boolean pushdown; + private final boolean cteReuse; - public AbstractCostBasedPlanTest(LocalQueryRunnerSupplier supplier, boolean pushdown) + public AbstractCostBasedPlanTest(LocalQueryRunnerSupplier supplier, boolean pushdown, boolean cteReuse) { super(supplier); this.pushdown = pushdown; + this.cteReuse = cteReuse; } protected abstract Stream getQueryResourcePaths(); @@ -84,6 +88,10 @@ public abstract class AbstractCostBasedPlanTest if (pushdown) { fileName = ".push" + fileName; } + else if (cteReuse) { + fileName = ".cte" + fileName; + } + return queryResourcePath.replaceAll("\\.sql$", fileName); } @@ -131,7 +139,7 @@ public abstract class AbstractCostBasedPlanTest .replace("\"${database}\".\"${schema}\".\"${prefix}", "\""); Plan plan = plan(sql, LogicalPlanner.Stage.OPTIMIZED_AND_VALIDATED, false); - JoinOrderPrinter joinOrderPrinter = new JoinOrderPrinter(); + JoinOrderPrinter joinOrderPrinter = new JoinOrderPrinter(cteReuse); plan.getRoot().accept(joinOrderPrinter, 0); return joinOrderPrinter.result(); } @@ -155,6 +163,12 @@ public abstract class AbstractCostBasedPlanTest extends SimplePlanVisitor { private final StringBuilder result = new StringBuilder(); + private final boolean cteReuse; + + public JoinOrderPrinter(boolean cteReuse) + { + this.cteReuse = cteReuse; + } public String result() { @@ -247,6 +261,22 @@ public abstract class AbstractCostBasedPlanTest return null; } + @Override + public Void visitCTEScan(CTEScanNode node, Integer indent) + { + output(indent, "cte %s", node.getCteRefName()); + return visitPlan(node, indent + 1); + } + + @Override + public Void visitFilter(FilterNode node, Integer indent) + { + if (cteReuse) { + output(indent, "Filter"); + } + return visitPlan(node, cteReuse ? (indent + 1) : indent); + } + private void output(int indent, String message, Object... args) { String formattedMessage = format(message, args); diff --git a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlan.java b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlan.java index 2de25b9ee..a7404f1a4 100644 --- a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlan.java +++ b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlan.java @@ -60,7 +60,7 @@ public class TestTpcdsCostBasedPlan new TpcdsConnectorFactory(1), ImmutableMap.of()); return queryRunner; - }, false); + }, false, false); } @Override diff --git a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlanCTEOpt.java b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlanCTEOpt.java new file mode 100644 index 000000000..2475e05ab --- /dev/null +++ b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlanCTEOpt.java @@ -0,0 +1,96 @@ +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.prestosql.sql.planner; + +import com.google.common.collect.ImmutableMap; +import io.prestosql.Session; +import io.prestosql.plugin.tpcds.TpcdsConnectorFactory; +import io.prestosql.sql.analyzer.FeaturesConfig.JoinDistributionType; +import io.prestosql.sql.analyzer.FeaturesConfig.JoinReorderingStrategy; +import io.prestosql.testing.LocalQueryRunner; + +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static io.prestosql.SystemSessionProperties.CTE_REUSE_ENABLED; +import static io.prestosql.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; +import static io.prestosql.SystemSessionProperties.JOIN_REORDERING_STRATEGY; +import static io.prestosql.testing.TestingSession.testSessionBuilder; +import static java.lang.String.format; + +/** + * This class tests cost-based optimization rules related to joins. It contains unmodified TPCDS queries. + * This class is using TPCDS connector configured in way to mock Hive connector with unpartitioned TPCDS tables. + */ +public class TestTpcdsCostBasedPlanCTEOpt + extends AbstractCostBasedPlanTest +{ + /* + * CAUTION: The expected plans here are not necessarily optimal yet. Their role is to prevent + * inadvertent regressions. A conscious improvement to the planner may require changing some + * of the expected plans, but any such change should be verified on an actual cluster with + * large amount of data. + */ + + public TestTpcdsCostBasedPlanCTEOpt() + { + super(() -> { + String catalog = "local"; + Session.SessionBuilder sessionBuilder = testSessionBuilder() + .setCatalog(catalog) + .setSchema("sf3000.0") + .setSystemProperty("task_concurrency", "1") // these tests don't handle exchanges from local parallel + .setSystemProperty(JOIN_REORDERING_STRATEGY, JoinReorderingStrategy.AUTOMATIC.name()) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .setSystemProperty(CTE_REUSE_ENABLED, "true"); + + LocalQueryRunner queryRunner = LocalQueryRunner.queryRunnerWithFakeNodeCountForStats(sessionBuilder.build(), 8); + queryRunner.createCatalog( + catalog, + new TpcdsConnectorFactory(1), + ImmutableMap.of()); + return queryRunner; + }, false, true); + } + + @Override + protected Stream getQueryResourcePaths() + { + return IntStream.of(1, 2, 4, 11, 14, 23, 24, 30, 31, 39, 47, 57, 59, 64, 74, 75, 81, 95) + .boxed() + .flatMap(i -> { + String queryId = format("q%02d", i); + if (i == 14 || i == 23 || i == 24 || i == 39) { + return Stream.of(queryId + "_1", queryId + "_2"); + } + return Stream.of(queryId); + }) + .map(queryId -> format("/sql/presto/tpcds/%s.sql", queryId)); + } + + @SuppressWarnings("unused") + public static final class UpdateTestFiles + { + // Intellij doesn't handle well situation when test class has main(), hence inner class. + + private UpdateTestFiles() {} + + public static void main(String[] args) + throws Exception + { + new TestTpcdsCostBasedPlanCTEOpt().generate(); + } + } +} diff --git a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlanPushdown.java b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlanPushdown.java index b6a813d29..533277e41 100644 --- a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlanPushdown.java +++ b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpcdsCostBasedPlanPushdown.java @@ -118,7 +118,7 @@ public class TestTpcdsCostBasedPlanPushdown queryRunner.execute("create table web_sales with (format='orc') as select * from tpcds.tiny.web_sales"); queryRunner.execute("create table web_site with (format='orc') as select * from tpcds.tiny.web_site"); return queryRunner; - }, true); + }, true, false); } @Override diff --git a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpchCostBasedPlan.java b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpchCostBasedPlan.java index f78fc4ea9..d303bfceb 100644 --- a/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpchCostBasedPlan.java +++ b/presto-benchto-benchmarks/src/test/java/io/prestosql/sql/planner/TestTpchCostBasedPlan.java @@ -64,7 +64,7 @@ public class TestTpchCostBasedPlan new TpchConnectorFactory(1, false, false), ImmutableMap.of(TPCH_COLUMN_NAMING_PROPERTY, ColumnNaming.SIMPLIFIED.name())); return queryRunner; - }, false); + }, false, false); } @Override diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q01.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q01.cte.plan.txt new file mode 100644 index 000000000..22621f2e4 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q01.cte.plan.txt @@ -0,0 +1,48 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + Filter + cross join: + join (LEFT, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_customer_sk"]) + join (INNER, REPLICATED): + final aggregation over (sr_customer_sk, sr_store_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_customer_sk", "sr_store_sk"]) + partial aggregation over (sr_customer_sk, sr_store_sk) + join (INNER, REPLICATED): + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over (sr_store_sk_24) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_store_sk_24"]) + partial aggregation over (sr_store_sk_24) + final aggregation over (sr_customer_sk_20, sr_store_sk_24) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_customer_sk_20", "sr_store_sk_24"]) + partial aggregation over (sr_customer_sk_20, sr_store_sk_24) + join (INNER, REPLICATED): + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over () + values (1 rows) diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q02.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q02.cte.plan.txt new file mode 100644 index 000000000..b888d3070 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q02.cte.plan.txt @@ -0,0 +1,53 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["expr_71"]) + join (INNER, REPLICATED): + remote exchange (REPARTITION, HASH, ["expr_71", "expr_72", "expr_73", "expr_74", "expr_75", "expr_76", "expr_77", "expr_78"]) + cte wswscs + final aggregation over (d_week_seq$gid) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq$gid"]) + partial aggregation over (d_week_seq$gid) + join (INNER, REPLICATED): + remote exchange (REPARTITION, HASH, ["expr_23", "expr_24"]) + cte wscs + remote exchange (REPARTITION, ROUND_ROBIN, []) + Filter + scan web_sales + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_395"]) + join (INNER, REPLICATED): + remote exchange (REPARTITION, HASH, ["expr_304", "expr_305", "expr_306", "expr_307", "expr_308", "expr_309", "expr_310", "expr_311"]) + cte wswscs + final aggregation over (d_week_seq$gid_264) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq$gid_264"]) + partial aggregation over (d_week_seq$gid_264) + join (INNER, REPLICATED): + remote exchange (REPARTITION, HASH, ["expr_226", "expr_227"]) + cte wscs + remote exchange (REPARTITION, ROUND_ROBIN, []) + Filter + scan web_sales + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q04.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q04.cte.plan.txt new file mode 100644 index 000000000..64285e785 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q04.cte.plan.txt @@ -0,0 +1,244 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_id_992"]) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["c_customer_id"]) + Filter + final aggregation over (c_birth_country, c_customer_id, c_email_address, c_first_name, c_last_name, c_login, c_preferred_cust_flag, d_year) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country", "c_customer_id", "c_email_address", "c_first_name", "c_last_name", "c_login", "c_preferred_cust_flag", "d_year"]) + partial aggregation over (c_birth_country, c_customer_id, c_email_address, c_first_name, c_last_name, c_login, c_preferred_cust_flag, d_year) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_29"]) + single aggregation over (c_birth_country_42, c_customer_id_29, c_email_address_44, c_first_name_36, c_last_name_37, c_login_43, c_preferred_cust_flag_38, d_year_52) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_123"]) + single aggregation over (c_birth_country_136, c_customer_id_123, c_email_address_138, c_first_name_130, c_last_name_131, c_login_137, c_preferred_cust_flag_132, d_year_146) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_247"]) + final aggregation over (c_birth_country_260, c_customer_id_247, c_email_address_262, c_first_name_254, c_last_name_255, c_login_261, c_preferred_cust_flag_256, d_year_293) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_260", "c_customer_id_247", "c_email_address_262", "c_first_name_254", "c_last_name_255", "c_login_261", "c_preferred_cust_flag_256", "d_year_293"]) + partial aggregation over (c_birth_country_260, c_customer_id_247, c_email_address_262, c_first_name_254, c_last_name_255, c_login_261, c_preferred_cust_flag_256, d_year_293) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_267"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_246"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_354"]) + single aggregation over (c_birth_country_367, c_customer_id_354, c_email_address_369, c_first_name_361, c_last_name_362, c_login_368, c_preferred_cust_flag_363, d_year_411) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_482"]) + single aggregation over (c_birth_country_495, c_customer_id_482, c_email_address_497, c_first_name_489, c_last_name_490, c_login_496, c_preferred_cust_flag_491, d_year_539) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_640"]) + single aggregation over (c_birth_country_653, c_customer_id_640, c_email_address_655, c_first_name_647, c_last_name_648, c_login_654, c_preferred_cust_flag_649, d_year_686) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_747"]) + Filter + final aggregation over (c_birth_country_760, c_customer_id_747, c_email_address_762, c_first_name_754, c_last_name_755, c_login_761, c_preferred_cust_flag_756, d_year_804) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_760", "c_customer_id_747", "c_email_address_762", "c_first_name_754", "c_last_name_755", "c_login_761", "c_preferred_cust_flag_756", "d_year_804"]) + partial aggregation over (c_birth_country_760, c_customer_id_747, c_email_address_762, c_first_name_754, c_last_name_755, c_login_761, c_preferred_cust_flag_756, d_year_804) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk_767"]) + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_746"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_875"]) + single aggregation over (c_birth_country_888, c_customer_id_875, c_email_address_890, c_first_name_882, c_last_name_883, c_login_889, c_preferred_cust_flag_884, d_year_932) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_1033"]) + single aggregation over (c_birth_country_1046, c_customer_id_1033, c_email_address_1048, c_first_name_1040, c_last_name_1041, c_login_1047, c_preferred_cust_flag_1042, d_year_1079) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_1140"]) + final aggregation over (c_birth_country_1153, c_customer_id_1140, c_email_address_1155, c_first_name_1147, c_last_name_1148, c_login_1154, c_preferred_cust_flag_1149, d_year_1197) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_1153", "c_customer_id_1140", "c_email_address_1155", "c_first_name_1147", "c_last_name_1148", "c_login_1154", "c_preferred_cust_flag_1149", "d_year_1197"]) + partial aggregation over (c_birth_country_1153, c_customer_id_1140, c_email_address_1155, c_first_name_1147, c_last_name_1148, c_login_1154, c_preferred_cust_flag_1149, d_year_1197) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk_1160"]) + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_1139"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_1268"]) + single aggregation over (c_birth_country_1281, c_customer_id_1268, c_email_address_1283, c_first_name_1275, c_last_name_1276, c_login_1282, c_preferred_cust_flag_1277, d_year_1325) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_1426"]) + single aggregation over (c_birth_country_1439, c_customer_id_1426, c_email_address_1441, c_first_name_1433, c_last_name_1434, c_login_1440, c_preferred_cust_flag_1435, d_year_1472) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_1533"]) + single aggregation over (c_birth_country_1546, c_customer_id_1533, c_email_address_1548, c_first_name_1540, c_last_name_1541, c_login_1547, c_preferred_cust_flag_1542, d_year_1590) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_1661"]) + Filter + final aggregation over (c_birth_country_1674, c_customer_id_1661, c_email_address_1676, c_first_name_1668, c_last_name_1669, c_login_1675, c_preferred_cust_flag_1670, d_year_1718) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_1674", "c_customer_id_1661", "c_email_address_1676", "c_first_name_1668", "c_last_name_1669", "c_login_1675", "c_preferred_cust_flag_1670", "d_year_1718"]) + partial aggregation over (c_birth_country_1674, c_customer_id_1661, c_email_address_1676, c_first_name_1668, c_last_name_1669, c_login_1675, c_preferred_cust_flag_1670, d_year_1718) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk_1682"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_1660"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_1819"]) + single aggregation over (c_birth_country_1832, c_customer_id_1819, c_email_address_1834, c_first_name_1826, c_last_name_1827, c_login_1833, c_preferred_cust_flag_1828, d_year_1865) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_1926"]) + single aggregation over (c_birth_country_1939, c_customer_id_1926, c_email_address_1941, c_first_name_1933, c_last_name_1934, c_login_1940, c_preferred_cust_flag_1935, d_year_1983) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_2054"]) + final aggregation over (c_birth_country_2067, c_customer_id_2054, c_email_address_2069, c_first_name_2061, c_last_name_2062, c_login_2068, c_preferred_cust_flag_2063, d_year_2111) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_2067", "c_customer_id_2054", "c_email_address_2069", "c_first_name_2061", "c_last_name_2062", "c_login_2068", "c_preferred_cust_flag_2063", "d_year_2111"]) + partial aggregation over (c_birth_country_2067, c_customer_id_2054, c_email_address_2069, c_first_name_2061, c_last_name_2062, c_login_2068, c_preferred_cust_flag_2063, d_year_2111) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk_2075"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_2053"]) + scan customer diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q11.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q11.cte.plan.txt new file mode 100644 index 000000000..6a2fc9502 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q11.cte.plan.txt @@ -0,0 +1,122 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["c_customer_id"]) + Filter + final aggregation over (c_birth_country, c_customer_id, c_email_address, c_first_name, c_last_name, c_login, c_preferred_cust_flag, d_year) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country", "c_customer_id", "c_email_address", "c_first_name", "c_last_name", "c_login", "c_preferred_cust_flag", "d_year"]) + partial aggregation over (c_birth_country, c_customer_id, c_email_address, c_first_name, c_last_name, c_login, c_preferred_cust_flag, d_year) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_29"]) + single aggregation over (c_birth_country_42, c_customer_id_29, c_email_address_44, c_first_name_36, c_last_name_37, c_login_43, c_preferred_cust_flag_38, d_year_52) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_153"]) + final aggregation over (c_birth_country_166, c_customer_id_153, c_email_address_168, c_first_name_160, c_last_name_161, c_login_167, c_preferred_cust_flag_162, d_year_199) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_166", "c_customer_id_153", "c_email_address_168", "c_first_name_160", "c_last_name_161", "c_login_167", "c_preferred_cust_flag_162", "d_year_199"]) + partial aggregation over (c_birth_country_166, c_customer_id_153, c_email_address_168, c_first_name_160, c_last_name_161, c_login_167, c_preferred_cust_flag_162, d_year_199) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_173"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_152"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_260"]) + single aggregation over (c_birth_country_273, c_customer_id_260, c_email_address_275, c_first_name_267, c_last_name_268, c_login_274, c_preferred_cust_flag_269, d_year_317) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_418"]) + single aggregation over (c_birth_country_431, c_customer_id_418, c_email_address_433, c_first_name_425, c_last_name_426, c_login_432, c_preferred_cust_flag_427, d_year_464) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_525"]) + Filter + final aggregation over (c_birth_country_538, c_customer_id_525, c_email_address_540, c_first_name_532, c_last_name_533, c_login_539, c_preferred_cust_flag_534, d_year_582) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_538", "c_customer_id_525", "c_email_address_540", "c_first_name_532", "c_last_name_533", "c_login_539", "c_preferred_cust_flag_534", "d_year_582"]) + partial aggregation over (c_birth_country_538, c_customer_id_525, c_email_address_540, c_first_name_532, c_last_name_533, c_login_539, c_preferred_cust_flag_534, d_year_582) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk_546"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_524"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_683"]) + single aggregation over (c_birth_country_696, c_customer_id_683, c_email_address_698, c_first_name_690, c_last_name_691, c_login_697, c_preferred_cust_flag_692, d_year_729) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_790"]) + final aggregation over (c_birth_country_803, c_customer_id_790, c_email_address_805, c_first_name_797, c_last_name_798, c_login_804, c_preferred_cust_flag_799, d_year_847) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_birth_country_803", "c_customer_id_790", "c_email_address_805", "c_first_name_797", "c_last_name_798", "c_login_804", "c_preferred_cust_flag_799", "d_year_847"]) + partial aggregation over (c_birth_country_803, c_customer_id_790, c_email_address_805, c_first_name_797, c_last_name_798, c_login_804, c_preferred_cust_flag_799, d_year_847) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk_811"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_789"]) + scan customer diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q14_1.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q14_1.cte.plan.txt new file mode 100644 index 000000000..c9f1522c8 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q14_1.cte.plan.txt @@ -0,0 +1,313 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over (channel$gid, groupid, i_brand_id$gid_1742, i_category_id$gid_1744, i_class_id$gid_1743) + local exchange (REPARTITION, HASH, ["channel$gid", "groupid", "i_brand_id$gid_1742", "i_category_id$gid_1744", "i_class_id$gid_1743"]) + remote exchange (REPARTITION, HASH, ["channel$gid", "groupid", "i_brand_id$gid_1742", "i_category_id$gid_1744", "i_class_id$gid_1743"]) + partial aggregation over (channel$gid, groupid, i_brand_id$gid_1742, i_category_id$gid_1744, i_class_id$gid_1743) + local exchange (REPARTITION, ROUND_ROBIN, []) + Filter + cross join: + final aggregation over (i_brand_id, i_category_id, i_class_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id", "i_category_id", "i_class_id"]) + partial aggregation over (i_brand_id, i_category_id, i_class_id) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_229"]) + cte cross_items + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_8", "i_category_id_12", "i_class_id_10"]) + Filter + scan item + Filter + final aggregation over (expr_216, expr_217, expr_218) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_1775", "expr_1776", "expr_1777"]) + partial aggregation over (expr_1775, expr_1776, expr_1777) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1781", "expr_1782", "expr_1783"]) + partial aggregation over (expr_1781, expr_1782, expr_1783) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1787", "expr_1788", "expr_1789"]) + partial aggregation over (expr_1787, expr_1788, expr_1789) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cte avg_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + Filter + cross join: + final aggregation over (i_brand_id_508, i_category_id_512, i_class_id_510) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_508", "i_category_id_512", "i_class_id_510"]) + partial aggregation over (i_brand_id_508, i_category_id_512, i_class_id_510) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk_482"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_849"]) + cte cross_items + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_559", "i_category_id_563", "i_class_id_561"]) + Filter + scan item + Filter + final aggregation over (expr_836, expr_837, expr_838) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_1799", "expr_1800", "expr_1801"]) + partial aggregation over (expr_1799, expr_1800, expr_1801) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1805", "expr_1806", "expr_1807"]) + partial aggregation over (expr_1805, expr_1806, expr_1807) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1811", "expr_1812", "expr_1813"]) + partial aggregation over (expr_1811, expr_1812, expr_1813) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cte avg_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + Filter + cross join: + final aggregation over (i_brand_id_1135, i_category_id_1139, i_class_id_1137) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_1135", "i_category_id_1139", "i_class_id_1137"]) + partial aggregation over (i_brand_id_1135, i_category_id_1139, i_class_id_1137) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk_1097"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_1476"]) + cte cross_items + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_1186", "i_category_id_1190", "i_class_id_1188"]) + Filter + scan item + Filter + final aggregation over (expr_1463, expr_1464, expr_1465) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_1823", "expr_1824", "expr_1825"]) + partial aggregation over (expr_1823, expr_1824, expr_1825) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1829", "expr_1830", "expr_1831"]) + partial aggregation over (expr_1829, expr_1830, expr_1831) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1835", "expr_1836", "expr_1837"]) + partial aggregation over (expr_1835, expr_1836, expr_1837) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cte avg_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q14_2.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q14_2.cte.plan.txt new file mode 100644 index 000000000..ba63836ae --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q14_2.cte.plan.txt @@ -0,0 +1,221 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + Filter + cross join: + final aggregation over (i_brand_id, i_category_id, i_class_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id", "i_category_id", "i_class_id"]) + partial aggregation over (i_brand_id, i_category_id, i_class_id) + join (INNER, REPLICATED): + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_229"]) + cte cross_items + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_8", "i_category_id_12", "i_class_id_10"]) + Filter + scan item + Filter + final aggregation over (expr_216, expr_217, expr_218) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_1199", "expr_1200", "expr_1201"]) + partial aggregation over (expr_1199, expr_1200, expr_1201) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1205", "expr_1206", "expr_1207"]) + partial aggregation over (expr_1205, expr_1206, expr_1207) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1211", "expr_1212", "expr_1213"]) + partial aggregation over (expr_1211, expr_1212, expr_1213) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cte avg_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + Filter + cross join: + final aggregation over (i_brand_id_534, i_category_id_538, i_class_id_536) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_534", "i_category_id_538", "i_class_id_536"]) + partial aggregation over (i_brand_id_534, i_category_id_538, i_class_id_536) + join (INNER, REPLICATED): + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_506"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_875"]) + cte cross_items + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_585", "i_category_id_589", "i_class_id_587"]) + Filter + scan item + Filter + final aggregation over (expr_862, expr_863, expr_864) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_1223", "expr_1224", "expr_1225"]) + partial aggregation over (expr_1223, expr_1224, expr_1225) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1229", "expr_1230", "expr_1231"]) + partial aggregation over (expr_1229, expr_1230, expr_1231) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + remote exchange (REPARTITION, HASH, ["expr_1235", "expr_1236", "expr_1237"]) + partial aggregation over (expr_1235, expr_1236, expr_1237) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cte avg_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q23_1.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q23_1.cte.plan.txt new file mode 100644 index 000000000..de696a01a --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q23_1.cte.plan.txt @@ -0,0 +1,155 @@ +final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_48"]) + remote exchange (REPARTITION, HASH, ["expr_47", "expr_48", "expr_49", "expr_50"]) + cte frequent_ss_items + Filter + final aggregation over (d_date$gid, i_item_sk$gid, substr$gid) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date$gid", "i_item_sk$gid", "substr$gid"]) + partial aggregation over (d_date$gid, i_item_sk$gid, substr$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_185"]) + remote exchange (REPARTITION, HASH, ["expr_185", "expr_186"]) + cte best_ss_customer + Filter + cross join: + final aggregation over (c_customer_sk$gid) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid"]) + partial aggregation over (c_customer_sk$gid) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_60"]) + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_172"]) + cte max_store_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + final aggregation over (c_customer_sk$gid_158) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid_158"]) + partial aggregation over (c_customer_sk$gid_158) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_90"]) + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_110"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + partial aggregation over () + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_322"]) + remote exchange (REPARTITION, HASH, ["expr_321", "expr_322", "expr_323", "expr_324"]) + cte frequent_ss_items + Filter + final aggregation over (d_date$gid_302, i_item_sk$gid_301, substr$gid_300) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date$gid_302", "i_item_sk$gid_301", "substr$gid_300"]) + partial aggregation over (d_date$gid_302, i_item_sk$gid_301, substr$gid_300) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_482"]) + remote exchange (REPARTITION, HASH, ["expr_482", "expr_483"]) + cte best_ss_customer + Filter + cross join: + final aggregation over (c_customer_sk$gid_376) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid_376"]) + partial aggregation over (c_customer_sk$gid_376) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_335"]) + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_355"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_469"]) + cte max_store_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + final aggregation over (c_customer_sk$gid_453) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid_453"]) + partial aggregation over (c_customer_sk$gid_453) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_385"]) + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_405"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q23_2.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q23_2.cte.plan.txt new file mode 100644 index 000000000..5522d57dc --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q23_2.cte.plan.txt @@ -0,0 +1,172 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over (c_first_name, c_last_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name", "c_last_name"]) + partial aggregation over (c_first_name, c_last_name) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_48"]) + remote exchange (REPARTITION, HASH, ["expr_47", "expr_48", "expr_49", "expr_50"]) + cte frequent_ss_items + Filter + final aggregation over (d_date$gid, i_item_sk$gid, substr$gid) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date$gid", "i_item_sk$gid", "substr$gid"]) + partial aggregation over (d_date$gid, i_item_sk$gid, substr$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_203"]) + remote exchange (REPARTITION, HASH, ["expr_203", "expr_204"]) + cte best_ss_customer + Filter + cross join: + final aggregation over (c_customer_sk$gid) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid"]) + partial aggregation over (c_customer_sk$gid) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_60"]) + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_80"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_190"]) + cte max_store_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + final aggregation over (c_customer_sk$gid_176) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid_176"]) + partial aggregation over (c_customer_sk$gid_176) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_108"]) + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_128"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + final aggregation over (c_first_name_229, c_last_name_230) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name_229", "c_last_name_230"]) + partial aggregation over (c_first_name_229, c_last_name_230) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_221"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_366"]) + remote exchange (REPARTITION, HASH, ["expr_365", "expr_366", "expr_367", "expr_368"]) + cte frequent_ss_items + Filter + final aggregation over (d_date$gid_346, i_item_sk$gid_345, substr$gid_344) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date$gid_346", "i_item_sk$gid_345", "substr$gid_344"]) + partial aggregation over (d_date$gid_346, i_item_sk$gid_345, substr$gid_344) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_526"]) + remote exchange (REPARTITION, HASH, ["expr_526", "expr_527"]) + cte best_ss_customer + Filter + cross join: + final aggregation over (c_customer_sk$gid_420) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid_420"]) + partial aggregation over (c_customer_sk$gid_420) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_379"]) + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_399"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_513"]) + cte max_store_sales + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + final aggregation over (c_customer_sk$gid_497) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk$gid_497"]) + partial aggregation over (c_customer_sk$gid_497) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_429"]) + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_449"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q24_1.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q24_1.cte.plan.txt new file mode 100644 index 000000000..2d6229170 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q24_1.cte.plan.txt @@ -0,0 +1,76 @@ +remote exchange (GATHER, SINGLE, []) + Filter + cross join: + final aggregation over (c_first_name, c_last_name, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name", "c_last_name", "s_store_name"]) + partial aggregation over (c_first_name, c_last_name, s_store_name) + final aggregation over (c_first_name, c_last_name, ca_state, i_color, i_current_price, i_manager_id, i_size, i_units, s_state, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name", "c_last_name", "ca_state", "i_color", "i_current_price", "i_manager_id", "i_size", "i_units", "s_state", "s_store_name"]) + partial aggregation over (c_first_name, c_last_name, ca_state, i_color, i_current_price, i_manager_id, i_size, i_units, s_state, s_store_name) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["sr_item_sk", "sr_ticket_number"]) + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + final aggregation over (c_first_name_181, c_last_name_182, ca_state_199, i_color_168, i_current_price_156, i_manager_id_171, i_size_166, i_units_169, s_state_146, s_store_name_127) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name_181", "c_last_name_182", "ca_state_199", "i_color_168", "i_current_price_156", "i_manager_id_171", "i_size_166", "i_units_169", "s_state_146", "s_store_name_127"]) + partial aggregation over (c_first_name_181, c_last_name_182, ca_state_199, i_color_168, i_current_price_156, i_manager_id_171, i_size_166, i_units_169, s_state_146, s_store_name_127) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_birth_country_187", "s_zip_147"]) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_82"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_81", "ss_ticket_number_88"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk_104", "sr_ticket_number_111"]) + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_173"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_zip_200", "upper_302"]) + scan customer_address diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q24_2.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q24_2.cte.plan.txt new file mode 100644 index 000000000..2d6229170 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q24_2.cte.plan.txt @@ -0,0 +1,76 @@ +remote exchange (GATHER, SINGLE, []) + Filter + cross join: + final aggregation over (c_first_name, c_last_name, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name", "c_last_name", "s_store_name"]) + partial aggregation over (c_first_name, c_last_name, s_store_name) + final aggregation over (c_first_name, c_last_name, ca_state, i_color, i_current_price, i_manager_id, i_size, i_units, s_state, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name", "c_last_name", "ca_state", "i_color", "i_current_price", "i_manager_id", "i_size", "i_units", "s_state", "s_store_name"]) + partial aggregation over (c_first_name, c_last_name, ca_state, i_color, i_current_price, i_manager_id, i_size, i_units, s_state, s_store_name) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["sr_item_sk", "sr_ticket_number"]) + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + final aggregation over (c_first_name_181, c_last_name_182, ca_state_199, i_color_168, i_current_price_156, i_manager_id_171, i_size_166, i_units_169, s_state_146, s_store_name_127) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name_181", "c_last_name_182", "ca_state_199", "i_color_168", "i_current_price_156", "i_manager_id_171", "i_size_166", "i_units_169", "s_state_146", "s_store_name_127"]) + partial aggregation over (c_first_name_181, c_last_name_182, ca_state_199, i_color_168, i_current_price_156, i_manager_id_171, i_size_166, i_units_169, s_state_146, s_store_name_127) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_birth_country_187", "s_zip_147"]) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_82"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_81", "ss_ticket_number_88"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk_104", "sr_ticket_number_111"]) + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_173"]) + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_zip_200", "upper_302"]) + scan customer_address diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q30.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q30.cte.plan.txt new file mode 100644 index 000000000..f4a6ecb08 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q30.cte.plan.txt @@ -0,0 +1,57 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + Filter + cross join: + join (LEFT, REPLICATED): + join (INNER, REPLICATED): + final aggregation over (ca_state, wr_returning_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state", "wr_returning_customer_sk"]) + partial aggregation over (ca_state, wr_returning_customer_sk) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["wr_returning_addr_sk"]) + join (INNER, REPLICATED): + Filter + scan web_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over (ca_state_90) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state_90"]) + partial aggregation over (ca_state_90) + final aggregation over (ca_state_90, wr_returning_customer_sk_37) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state_90", "wr_returning_customer_sk_37"]) + partial aggregation over (ca_state_90, wr_returning_customer_sk_37) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["wr_returning_addr_sk_40"]) + join (INNER, REPLICATED): + Filter + scan web_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_82"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over () + values (1 rows) diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q31.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q31.cte.plan.txt new file mode 100644 index 000000000..d6fb051a7 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q31.cte.plan.txt @@ -0,0 +1,115 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + final aggregation over (ca_county_81, d_qoy_56, d_year_52) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_81", "d_qoy_56", "d_year_52"]) + partial aggregation over (ca_county_81, d_qoy_56, d_year_52) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk_29"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_74"]) + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_173", NullableValue{type=integer, value=2000}, NullableValue{type=integer, value=2}]) + final aggregation over (ca_county_173, d_qoy_148, d_year_144) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_173", "d_qoy_148", "d_year_144"]) + partial aggregation over (ca_county_173, d_qoy_148, d_year_144) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk_121"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_166"]) + Filter + scan customer_address + join (INNER, PARTITIONED): + final aggregation over (ca_county_345, d_qoy_320, d_year_316) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_345", "d_qoy_320", "d_year_316"]) + partial aggregation over (ca_county_345, d_qoy_320, d_year_316) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_addr_sk_283"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_338"]) + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_448", NullableValue{type=integer, value=2000}, NullableValue{type=integer, value=2}]) + final aggregation over (ca_county_448, d_qoy_423, d_year_419) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_448", "d_qoy_423", "d_year_419"]) + partial aggregation over (ca_county_448, d_qoy_423, d_year_419) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_addr_sk_386"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_441"]) + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county", NullableValue{type=integer, value=2000}, NullableValue{type=integer, value=2}]) + join (INNER, PARTITIONED): + final aggregation over (ca_county, d_qoy, d_year) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county", "d_qoy", "d_year"]) + partial aggregation over (ca_county, d_qoy, d_year) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + Filter + scan customer_address + final aggregation over (ca_county_242, d_qoy_217, d_year_213) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_242", "d_qoy_217", "d_year_213"]) + partial aggregation over (ca_county_242, d_qoy_217, d_year_213) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_addr_sk"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_235"]) + scan customer_address diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q39_1.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q39_1.cte.plan.txt new file mode 100644 index 000000000..21bc58990 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q39_1.cte.plan.txt @@ -0,0 +1,49 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["inv_item_sk", "inv_warehouse_sk"]) + Filter + final aggregation over (d_moy, inv_item_sk, inv_warehouse_sk, w_warehouse_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy", "inv_item_sk", "inv_warehouse_sk", "w_warehouse_name"]) + partial aggregation over (d_moy, inv_item_sk, inv_warehouse_sk, w_warehouse_name) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan inventory + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan warehouse + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["inv_item_sk_63", "inv_warehouse_sk_64"]) + Filter + final aggregation over (d_moy_110, inv_item_sk_63, inv_warehouse_sk_64, w_warehouse_name_90) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy_110", "inv_item_sk_63", "inv_warehouse_sk_64", "w_warehouse_name_90"]) + partial aggregation over (d_moy_110, inv_item_sk_63, inv_warehouse_sk_64, w_warehouse_name_90) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan inventory + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan warehouse diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q39_2.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q39_2.cte.plan.txt new file mode 100644 index 000000000..21bc58990 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q39_2.cte.plan.txt @@ -0,0 +1,49 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["inv_item_sk", "inv_warehouse_sk"]) + Filter + final aggregation over (d_moy, inv_item_sk, inv_warehouse_sk, w_warehouse_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy", "inv_item_sk", "inv_warehouse_sk", "w_warehouse_name"]) + partial aggregation over (d_moy, inv_item_sk, inv_warehouse_sk, w_warehouse_name) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan inventory + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan warehouse + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["inv_item_sk_63", "inv_warehouse_sk_64"]) + Filter + final aggregation over (d_moy_110, inv_item_sk_63, inv_warehouse_sk_64, w_warehouse_name_90) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy_110", "inv_item_sk_63", "inv_warehouse_sk_64", "w_warehouse_name_90"]) + partial aggregation over (d_moy_110, inv_item_sk_63, inv_warehouse_sk_64, w_warehouse_name_90) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan inventory + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan warehouse diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q47.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q47.cte.plan.txt new file mode 100644 index 000000000..6a3373da7 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q47.cte.plan.txt @@ -0,0 +1,86 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["expr_233", "expr_234", "expr_235", "expr_236", "expr_502"]) + remote exchange (REPARTITION, HASH, ["expr_233", "expr_234", "expr_235", "expr_236", "expr_237", "expr_238", "expr_239", "expr_240", "expr_241"]) + cte v1 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_191", "i_category_190", "s_company_name_193", "s_store_name_192"]) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year_188", "i_brand_185", "i_category_184", "s_company_name_187", "s_store_name_186"]) + final aggregation over (d_moy$gid_180, d_year$gid_179, i_brand$gid_176, i_category$gid_175, s_company_name$gid_178, s_store_name$gid_177) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy$gid_180", "d_year$gid_179", "i_brand$gid_176", "i_category$gid_175", "s_company_name$gid_178", "s_store_name$gid_177"]) + partial aggregation over (d_moy$gid_180, d_year$gid_179, i_brand$gid_176, i_category$gid_175, s_company_name$gid_178, s_store_name$gid_177) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_56", "expr_57", "expr_58", "expr_59", "expr_64"]) + remote exchange (REPARTITION, HASH, ["expr_56", "expr_57", "expr_58", "expr_59", "expr_60", "expr_61", "expr_62", "expr_63", "expr_64"]) + Filter + remote exchange (REPARTITION, HASH, ["expr_56", "expr_57", "expr_58", "expr_59", "expr_60", "expr_61", "expr_62", "expr_63", "expr_64"]) + cte v1 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_16", "i_category_15", "s_company_name_18", "s_store_name_17"]) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year_14", "i_brand_11", "i_category_10", "s_company_name_13", "s_store_name_12"]) + final aggregation over (d_moy$gid, d_year$gid, i_brand$gid, i_category$gid, s_company_name$gid, s_store_name$gid) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy$gid", "d_year$gid", "i_brand$gid", "i_category$gid", "s_company_name$gid", "s_store_name$gid"]) + partial aggregation over (d_moy$gid, d_year$gid, i_brand$gid, i_category$gid, s_company_name$gid, s_store_name$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_410", "expr_411", "expr_412", "expr_413", "expr_501"]) + remote exchange (REPARTITION, HASH, ["expr_410", "expr_411", "expr_412", "expr_413", "expr_414", "expr_415", "expr_416", "expr_417", "expr_418"]) + cte v1 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_368", "i_category_367", "s_company_name_370", "s_store_name_369"]) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year_365", "i_brand_362", "i_category_361", "s_company_name_364", "s_store_name_363"]) + final aggregation over (d_moy$gid_357, d_year$gid_356, i_brand$gid_353, i_category$gid_352, s_company_name$gid_355, s_store_name$gid_354) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy$gid_357", "d_year$gid_356", "i_brand$gid_353", "i_category$gid_352", "s_company_name$gid_355", "s_store_name$gid_354"]) + partial aggregation over (d_moy$gid_357, d_year$gid_356, i_brand$gid_353, i_category$gid_352, s_company_name$gid_355, s_store_name$gid_354) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q57.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q57.cte.plan.txt new file mode 100644 index 000000000..95af75824 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q57.cte.plan.txt @@ -0,0 +1,88 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cc_name", "i_brand", "i_category", "rank"]) + Filter + Filter + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name", "d_year", "i_brand", "i_category"]) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name", "i_brand", "i_category"]) + final aggregation over (cc_name, d_moy, d_year, i_brand, i_category) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name", "d_moy", "d_year", "i_brand", "i_category"]) + partial aggregation over (cc_name, d_moy, d_year, i_brand, i_category) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan call_center + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_230", "expr_231", "expr_232", "expr_494"]) + remote exchange (REPARTITION, HASH, ["expr_230", "expr_231", "expr_232", "expr_233", "expr_234", "expr_235", "expr_236", "expr_237"]) + Filter + remote exchange (REPARTITION, HASH, ["expr_230", "expr_231", "expr_232", "expr_233", "expr_234", "expr_235", "expr_236", "expr_237"]) + cte v1 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_194", "i_brand_193", "i_category_192"]) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_189", "d_year_190", "i_brand_188", "i_category_187"]) + final aggregation over (cc_name$gid_181, d_moy$gid_183, d_year$gid_182, i_brand$gid_180, i_category$gid_179) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name$gid_181", "d_moy$gid_183", "d_year$gid_182", "i_brand$gid_180", "i_category$gid_179"]) + partial aggregation over (cc_name$gid_181, d_moy$gid_183, d_year$gid_182, i_brand$gid_180, i_category$gid_179) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan call_center + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_411", "expr_412", "expr_413", "expr_493"]) + remote exchange (REPARTITION, HASH, ["expr_411", "expr_412", "expr_413", "expr_414", "expr_415", "expr_416", "expr_417", "expr_418"]) + Filter + remote exchange (REPARTITION, HASH, ["expr_411", "expr_412", "expr_413", "expr_414", "expr_415", "expr_416", "expr_417", "expr_418"]) + cte v1 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_375", "i_brand_374", "i_category_373"]) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_370", "d_year_371", "i_brand_369", "i_category_368"]) + final aggregation over (cc_name$gid_362, d_moy$gid_364, d_year$gid_363, i_brand$gid_361, i_category$gid_360) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name$gid_362", "d_moy$gid_364", "d_year$gid_363", "i_brand$gid_361", "i_category$gid_360"]) + partial aggregation over (cc_name$gid_362, d_moy$gid_364, d_year$gid_363, i_brand$gid_361, i_category$gid_360) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan call_center diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q59.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q59.cte.plan.txt new file mode 100644 index 000000000..f64fd6d94 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q59.cte.plan.txt @@ -0,0 +1,49 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_week_seq_63", "s_store_id"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + remote exchange (REPARTITION, HASH, ["d_week_seq", "ss_store_sk", "sum", "sum_10", "sum_11", "sum_12", "sum_13", "sum_8", "sum_9"]) + final aggregation over (d_week_seq, ss_store_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq", "ss_store_sk"]) + partial aggregation over (d_week_seq, ss_store_sk) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_361", "s_store_id_235"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + remote exchange (REPARTITION, HASH, ["d_week_seq_147", "ss_store_sk_127", "sum_182", "sum_183", "sum_184", "sum_185", "sum_186", "sum_187", "sum_188"]) + final aggregation over (d_week_seq_147, ss_store_sk_127) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_147", "ss_store_sk_127"]) + partial aggregation over (d_week_seq_147, ss_store_sk_127) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + scan store diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q64.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q64.cte.plan.txt new file mode 100644 index 000000000..392c8c1ce --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q64.cte.plan.txt @@ -0,0 +1,219 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + final aggregation over (ca_city, ca_city_98, ca_street_name, ca_street_name_95, ca_street_number, ca_street_number_94, ca_zip, ca_zip_101, d_year, d_year_28, d_year_56, expr_19, i_product_name, s_store_name, s_zip) + local exchange (GATHER, SINGLE, []) + partial aggregation over (ca_city, ca_city_98, ca_street_name, ca_street_name_95, ca_street_number, ca_street_number_94, ca_zip, ca_zip_101, d_year, d_year_28, d_year_56, expr_19, i_product_name, s_store_name, s_zip) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["expr_19"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["hd_income_band_sk_88"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["hd_income_band_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_hdemo_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_hdemo_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_promo_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_cdemo_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_cdemo_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_first_shipto_date_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_first_sales_date_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_store_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_sold_date_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_ticket_number"]) + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk", "sr_ticket_number"]) + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_19"]) + cte cs_ui + Filter + final aggregation over (cs_item_sk$gid) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk$gid"]) + partial aggregation over (cs_item_sk$gid) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk", "cs_order_number"]) + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cr_item_sk", "cr_order_number"]) + Filter + scan catalog_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk"]) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_store_sk"]) + Filter + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_22"]) + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_50"]) + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_demo_sk"]) + scan customer_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_demo_sk_78"]) + scan customer_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["p_promo_sk"]) + scan promotion + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["hd_demo_sk"]) + scan household_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["hd_demo_sk_87"]) + scan household_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_92"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ib_income_band_sk"]) + scan income_band + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ib_income_band_sk_105"]) + scan income_band + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk"]) + Filter + scan item + final aggregation over (ca_city_547, ca_city_560, ca_street_name_544, ca_street_name_557, ca_street_number_543, ca_street_number_556, ca_zip_550, ca_zip_563, d_year_369, d_year_397, d_year_425, expr_360, i_product_name_594, s_store_name_452, s_zip_472) + local exchange (GATHER, SINGLE, []) + partial aggregation over (ca_city_547, ca_city_560, ca_street_name_544, ca_street_name_557, ca_street_number_543, ca_street_number_556, ca_zip_550, ca_zip_563, d_year_369, d_year_397, d_year_425, expr_360, i_product_name_594, s_store_name_452, s_zip_472) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["expr_360"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["hd_income_band_sk_537"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["hd_income_band_sk_532"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk_480"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk_240"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_hdemo_sk_479"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_hdemo_sk_239"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_promo_sk_242"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_cdemo_sk_478"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_cdemo_sk_238"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_first_shipto_date_sk_481"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_first_sales_date_sk_482"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_237"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_store_sk_241"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_sold_date_sk_234"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_236"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_236", "ss_ticket_number_243"]) + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk_259", "sr_ticket_number_266"]) + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_360"]) + cte cs_ui + Filter + final aggregation over (cs_item_sk$gid_343) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk$gid_343"]) + partial aggregation over (cs_item_sk$gid_343) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk_292", "cs_order_number_294"]) + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cr_item_sk_313", "cr_order_number_327"]) + Filter + scan catalog_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_363"]) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_store_sk_447"]) + scan store + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_476"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_391"]) + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_419"]) + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_demo_sk_494"]) + scan customer_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_demo_sk_503"]) + scan customer_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["p_promo_sk_512"]) + scan promotion + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["hd_demo_sk_531"]) + scan household_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["hd_demo_sk_536"]) + scan household_demographics + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_541"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_554"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ib_income_band_sk_567"]) + scan income_band + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ib_income_band_sk_570"]) + scan income_band + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_573"]) + Filter + scan item diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q74.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q74.cte.plan.txt new file mode 100644 index 000000000..4936b91f7 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q74.cte.plan.txt @@ -0,0 +1,122 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["c_customer_id"]) + Filter + final aggregation over (c_customer_id, c_first_name, c_last_name, d_year) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id", "c_first_name", "c_last_name", "d_year"]) + partial aggregation over (c_customer_id, c_first_name, c_last_name, d_year) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_17"]) + single aggregation over (c_customer_id_17, c_first_name_24, c_last_name_25, d_year_40) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_109"]) + final aggregation over (c_customer_id_109, c_first_name_116, c_last_name_117, d_year_155) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_109", "c_first_name_116", "c_last_name_117", "d_year_155"]) + partial aggregation over (c_customer_id_109, c_first_name_116, c_last_name_117, d_year_155) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_129"]) + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_108"]) + Filter + scan customer + remote exchange (REPARTITION, HASH, ["c_customer_id_200"]) + single aggregation over (c_customer_id_200, c_first_name_207, c_last_name_208, d_year_257) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_326"]) + single aggregation over (c_customer_id_326, c_first_name_333, c_last_name_334, d_year_372) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_417"]) + Filter + final aggregation over (c_customer_id_417, c_first_name_424, c_last_name_425, d_year_474) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_417", "c_first_name_424", "c_last_name_425", "d_year_474"]) + partial aggregation over (c_customer_id_417, c_first_name_424, c_last_name_425, d_year_474) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk_438"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_416"]) + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_543"]) + single aggregation over (c_customer_id_543, c_first_name_550, c_last_name_551, d_year_589) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + values (0 rows) + Filter + values (0 rows) + Filter + values (0 rows) + remote exchange (REPARTITION, HASH, ["c_customer_id_634"]) + final aggregation over (c_customer_id_634, c_first_name_641, c_last_name_642, d_year_691) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_634", "c_first_name_641", "c_last_name_642", "d_year_691"]) + partial aggregation over (c_customer_id_634, c_first_name_641, c_last_name_642, d_year_691) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk_655"]) + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_633"]) + scan customer diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q75.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q75.cte.plan.txt new file mode 100644 index 000000000..f2fc9b05c --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q75.cte.plan.txt @@ -0,0 +1,129 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + single aggregation over (d_year_172, i_brand_id_173, i_category_id_175, i_class_id_174, i_manufact_id_176) + final aggregation over (d_year_172, expr_177, expr_178, i_brand_id_173, i_category_id_175, i_class_id_174, i_manufact_id_176) + local exchange (REPARTITION, HASH, ["d_year_172", "i_brand_id_173", "i_category_id_175", "i_class_id_174", "i_manufact_id_176"]) + remote exchange (REPARTITION, HASH, ["i_brand_id", "i_category_id", "i_class_id", "i_manufact_id"]) + partial aggregation over (d_year, expr_19, expr_20, i_brand_id, i_category_id, i_class_id, i_manufact_id) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cr_item_sk", "cr_order_number"]) + Filter + scan catalog_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk", "cs_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + remote exchange (REPARTITION, HASH, ["i_brand_id_28", "i_category_id_32", "i_class_id_30", "i_manufact_id_34"]) + partial aggregation over (d_year_51, expr_91, expr_92, i_brand_id_28, i_category_id_32, i_class_id_30, i_manufact_id_34) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["sr_item_sk", "sr_ticket_number"]) + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + remote exchange (REPARTITION, HASH, ["i_brand_id_107", "i_category_id_111", "i_class_id_109", "i_manufact_id_113"]) + partial aggregation over (d_year_130, expr_170, expr_171, i_brand_id_107, i_category_id_111, i_class_id_109, i_manufact_id_113) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["wr_item_sk", "wr_order_number"]) + Filter + scan web_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk", "ws_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + single aggregation over (d_year_619, i_brand_id_620, i_category_id_622, i_class_id_621, i_manufact_id_623) + final aggregation over (d_year_619, expr_624, expr_625, i_brand_id_620, i_category_id_622, i_class_id_621, i_manufact_id_623) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_275", "i_category_id_279", "i_class_id_277", "i_manufact_id_281"]) + partial aggregation over (d_year_298, expr_365, expr_366, i_brand_id_275, i_category_id_279, i_class_id_277, i_manufact_id_281) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cr_item_sk_324", "cr_order_number_338"]) + Filter + scan catalog_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk_249", "cs_order_number_251"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan catalog_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + remote exchange (REPARTITION, HASH, ["i_brand_id_397", "i_category_id_401", "i_class_id_399", "i_manufact_id_403"]) + partial aggregation over (d_year_420, expr_480, expr_481, i_brand_id_397, i_category_id_401, i_class_id_399, i_manufact_id_403) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["sr_item_sk_446", "sr_ticket_number_453"]) + Filter + scan store_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk_369", "ss_ticket_number_376"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan store_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + remote exchange (REPARTITION, HASH, ["i_brand_id_530", "i_category_id_534", "i_class_id_532", "i_manufact_id_536"]) + partial aggregation over (d_year_553, expr_617, expr_618, i_brand_id_530, i_category_id_534, i_class_id_532, i_manufact_id_536) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["wr_item_sk_579", "wr_order_number_590"]) + Filter + scan web_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk_492", "ws_order_number_506"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan item + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q81.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q81.cte.plan.txt new file mode 100644 index 000000000..08b6ca7c4 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q81.cte.plan.txt @@ -0,0 +1,58 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + Filter + cross join: + join (LEFT, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cr_returning_customer_sk"]) + final aggregation over (ca_state, cr_returning_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state", "cr_returning_customer_sk"]) + partial aggregation over (ca_state, cr_returning_customer_sk) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cr_returning_addr_sk"]) + join (INNER, REPLICATED): + Filter + scan catalog_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, REPLICATED): + Filter + scan customer + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over (ca_state_93) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state_93"]) + partial aggregation over (ca_state_93) + final aggregation over (ca_state_93, cr_returning_customer_sk_37) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state_93", "cr_returning_customer_sk_37"]) + partial aggregation over (ca_state_93, cr_returning_customer_sk_37) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cr_returning_addr_sk_40"]) + join (INNER, REPLICATED): + Filter + scan catalog_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_85"]) + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over () + values (1 rows) diff --git a/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q95.cte.plan.txt b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q95.cte.plan.txt new file mode 100644 index 000000000..272f74bf3 --- /dev/null +++ b/presto-benchto-benchmarks/src/test/resources/sql/presto/tpcds/q95.cte.plan.txt @@ -0,0 +1,50 @@ +final aggregation over () + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over () + local exchange (GATHER, SINGLE, []) + Filter + semijoin (PARTITIONED): + Filter + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan customer_address + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan date_dim + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + Filter + scan web_site + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_80"]) + cte ws_wh + Filter + single aggregation over (ws_order_number_17) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_order_number_17"]) + Filter + scan web_sales + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["wr_order_number"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["wr_order_number"]) + Filter + scan web_returns + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_170"]) + cte ws_wh + Filter + single aggregation over (ws_order_number_107) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_order_number_107"]) + scan web_sales diff --git a/presto-main/src/main/java/io/prestosql/sql/planner/optimizations/RowExpressionPredicatePushDown.java b/presto-main/src/main/java/io/prestosql/sql/planner/optimizations/RowExpressionPredicatePushDown.java index 481c7a1b6..8a1392741 100644 --- a/presto-main/src/main/java/io/prestosql/sql/planner/optimizations/RowExpressionPredicatePushDown.java +++ b/presto-main/src/main/java/io/prestosql/sql/planner/optimizations/RowExpressionPredicatePushDown.java @@ -99,6 +99,7 @@ import static io.prestosql.spi.sql.RowExpressionUtils.extractConjuncts; import static io.prestosql.spi.type.BigintType.BIGINT; import static io.prestosql.spi.type.BooleanType.BOOLEAN; import static io.prestosql.sql.DynamicFilters.createDynamicFilterRowExpression; +import static io.prestosql.sql.DynamicFilters.extractDynamicFilters; import static io.prestosql.sql.planner.SymbolUtils.toSymbolReference; import static io.prestosql.sql.planner.VariableReferenceSymbolConverter.toSymbol; import static io.prestosql.sql.planner.VariableReferenceSymbolConverter.toVariableReference; @@ -193,7 +194,8 @@ public class RowExpressionPredicatePushDown @Override public PlanNode visitCTEScan(CTEScanNode node, RewriteContext context) { - if (dynamicFiltering) { + if (dynamicFiltering && extractDynamicFilters(context.get()).getStaticConjuncts().size() == 0) { + //Currently we pushdown only if dynamic filter expression there. return context.defaultRewrite(node, context.get()); } else {