diff --git a/presto-main/src/main/java/com/facebook/presto/cost/ComparisonStatsCalculator.java b/presto-main/src/main/java/com/facebook/presto/cost/ComparisonStatsCalculator.java index d3010ac062986..f436ac1fb95fb 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/ComparisonStatsCalculator.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/ComparisonStatsCalculator.java @@ -185,12 +185,10 @@ private static Optional expressionToExpressionEquality( StatisticRange intersect = leftRange.intersect(rightRange); double nullsFilterFactor = (1 - leftStats.getNullsFraction()) * (1 - rightStats.getNullsFraction()); - double leftFilterFactor = firstNonNaN(leftRange.overlapPercentWith(intersect), 1); - double rightFilterFactor = firstNonNaN(rightRange.overlapPercentWith(intersect), 1); - double leftNdvInRange = leftFilterFactor * leftRange.getDistinctValuesCount(); - double rightNdvInRange = rightFilterFactor * rightRange.getDistinctValuesCount(); - double filterFactor = 1 * leftFilterFactor * rightFilterFactor / max(leftNdvInRange, rightNdvInRange, 1); - double retainedNdv = min(leftNdvInRange, rightNdvInRange); + double leftNdv = leftRange.getDistinctValuesCount(); + double rightNdv = rightRange.getDistinctValuesCount(); + double filterFactor = 1.0 / max(leftNdv, rightNdv, 1); + double retainedNdv = min(leftNdv, rightNdv); PlanNodeStatsEstimate.Builder estimate = PlanNodeStatsEstimate.buildFrom(inputStatistics) .setOutputRowCount(inputStatistics.getOutputRowCount() * nullsFilterFactor * filterFactor); diff --git a/presto-main/src/main/java/com/facebook/presto/cost/FilterStatsCalculator.java b/presto-main/src/main/java/com/facebook/presto/cost/FilterStatsCalculator.java index cfef6c5d658e2..920f42d311dc9 100644 --- a/presto-main/src/main/java/com/facebook/presto/cost/FilterStatsCalculator.java +++ b/presto-main/src/main/java/com/facebook/presto/cost/FilterStatsCalculator.java @@ -18,7 +18,10 @@ import com.facebook.presto.spi.type.Type; import com.facebook.presto.sql.analyzer.ExpressionAnalyzer; import com.facebook.presto.sql.analyzer.Scope; +import com.facebook.presto.sql.planner.ExpressionInterpreter; +import com.facebook.presto.sql.planner.LiteralEncoder; import com.facebook.presto.sql.planner.LiteralInterpreter; +import com.facebook.presto.sql.planner.NoOpSymbolResolver; import com.facebook.presto.sql.planner.Symbol; import com.facebook.presto.sql.planner.TypeProvider; import com.facebook.presto.sql.tree.AstVisitor; @@ -33,12 +36,14 @@ import com.facebook.presto.sql.tree.Literal; import com.facebook.presto.sql.tree.LogicalBinaryExpression; import com.facebook.presto.sql.tree.Node; +import com.facebook.presto.sql.tree.NodeRef; import com.facebook.presto.sql.tree.NotExpression; import com.facebook.presto.sql.tree.SymbolReference; import com.google.common.collect.ImmutableList; import javax.annotation.Nullable; +import java.util.Map; import java.util.Objects; import java.util.Optional; import java.util.OptionalDouble; @@ -51,6 +56,7 @@ import static com.facebook.presto.cost.StatsUtil.toStatsRepresentation; import static com.facebook.presto.cost.SymbolStatsEstimate.UNKNOWN_STATS; import static com.facebook.presto.cost.SymbolStatsEstimate.ZERO_STATS; +import static com.facebook.presto.spi.type.BooleanType.BOOLEAN; import static com.facebook.presto.sql.ExpressionUtils.and; import static com.facebook.presto.sql.tree.ComparisonExpression.Operator.EQUAL; import static com.facebook.presto.sql.tree.ComparisonExpression.Operator.GREATER_THAN_OR_EQUAL; @@ -61,6 +67,7 @@ import static java.lang.Double.isNaN; import static java.lang.Double.min; import static java.lang.String.format; +import static java.util.Collections.emptyList; import static java.util.Objects.requireNonNull; public class FilterStatsCalculator @@ -70,12 +77,14 @@ public class FilterStatsCalculator private final Metadata metadata; private final ScalarStatsCalculator scalarStatsCalculator; private final StatsNormalizer normalizer; + private final LiteralEncoder literalEncoder; public FilterStatsCalculator(Metadata metadata, ScalarStatsCalculator scalarStatsCalculator, StatsNormalizer normalizer) { this.metadata = requireNonNull(metadata, "metadata is null"); this.scalarStatsCalculator = requireNonNull(scalarStatsCalculator, "scalarStatsCalculator is null"); this.normalizer = requireNonNull(normalizer, "normalizer is null"); + this.literalEncoder = new LiteralEncoder(metadata.getBlockEncodingSerde()); } public PlanNodeStatsEstimate filterStats( @@ -84,10 +93,41 @@ public PlanNodeStatsEstimate filterStats( Session session, TypeProvider types) { - return new FilterExpressionStatsCalculatingVisitor(statsEstimate, session, types).process(predicate) + Expression simplifiedExpression = simplifyExpression(session, predicate, types); + return new FilterExpressionStatsCalculatingVisitor(statsEstimate, session, types) + .process(simplifiedExpression) .orElseGet(() -> normalizer.normalize(filterStatsForUnknownExpression(statsEstimate), types)); } + private Expression simplifyExpression(Session session, Expression predicate, TypeProvider types) + { + // TODO reuse com.facebook.presto.sql.planner.iterative.rule.SimplifyExpressions.rewrite + + Map, Type> expressionTypes = getExpressionTypes(session, predicate, types); + ExpressionInterpreter interpreter = ExpressionInterpreter.expressionOptimizer(predicate, metadata, session, expressionTypes); + Object value = interpreter.optimize(NoOpSymbolResolver.INSTANCE); + + if (value == null) { + // Expression evaluates to SQL null, which in Filter is equivalent to false. This assumes the expression is a top-level expression (eg. not in NOT). + value = false; + } + return literalEncoder.toExpression(value, BOOLEAN); + } + + private Map, Type> getExpressionTypes(Session session, Expression expression, TypeProvider types) + { + ExpressionAnalyzer expressionAnalyzer = ExpressionAnalyzer.createWithoutSubqueries( + metadata.getFunctionRegistry(), + metadata.getTypeManager(), + session, + types, + emptyList(), + node -> new IllegalStateException("Expected node: %s" + node), + false); + expressionAnalyzer.analyze(expression, Scope.create()); + return expressionAnalyzer.getExpressionTypes(); + } + private static PlanNodeStatsEstimate filterStatsForUnknownExpression(PlanNodeStatsEstimate inputStatistics) { return inputStatistics.mapOutputRowCount(rowCount -> rowCount * UNKNOWN_FILTER_COEFFICIENT); @@ -229,10 +269,10 @@ protected Optional visitBetweenPredicate(BetweenPredicate if (!(node.getValue() instanceof SymbolReference)) { return visitExpression(node, context); } - if (!(node.getMin() instanceof Literal || isSingleValue(getExpressionStats(node.getMin())))) { + if (!isSingleValue(node.getMin())) { return visitExpression(node, context); } - if (!(node.getMax() instanceof Literal || isSingleValue(getExpressionStats(node.getMax())))) { + if (!isSingleValue(node.getMax())) { return visitExpression(node, context); } @@ -351,6 +391,12 @@ private Optional asSymbol(Expression expression) return Optional.empty(); } + private boolean isSingleValue(Expression expression) + { + return (expression instanceof Literal) + || isSingleValue(getExpressionStats(expression)); + } + private boolean isSingleValue(SymbolStatsEstimate stats) { return stats.getDistinctValuesCount() == 1.0 diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanOptimizers.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanOptimizers.java index aca93237dd1fb..edbc37bc4785b 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanOptimizers.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/PlanOptimizers.java @@ -415,7 +415,7 @@ public PlanOptimizers( ruleStats, statsCalculator, estimatedExchangesCostCalculator, - ImmutableSet.of(new DetermineJoinDistributionType())))); // Must run before AddExchanges + ImmutableSet.of(new DetermineJoinDistributionType(costComparator))))); // Must run before AddExchanges builder.add(new DetermineSemiJoinDistributionType()); // Must run before AddExchanges builder.add( new IterativeOptimizer( diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java index 99934b24edfec..c49ca9fd3edbb 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/iterative/rule/DetermineJoinDistributionType.java @@ -14,13 +14,22 @@ package com.facebook.presto.sql.planner.iterative.rule; +import com.facebook.presto.cost.CostComparator; +import com.facebook.presto.cost.CostProvider; +import com.facebook.presto.cost.PlanNodeCostEstimate; import com.facebook.presto.matching.Captures; import com.facebook.presto.matching.Pattern; +import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinDistributionType; import com.facebook.presto.sql.planner.iterative.Rule; import com.facebook.presto.sql.planner.plan.JoinNode; -import com.facebook.presto.sql.planner.plan.JoinNode.DistributionType; +import com.facebook.presto.sql.planner.plan.PlanNode; +import com.google.common.collect.Ordering; + +import java.util.ArrayList; +import java.util.List; import static com.facebook.presto.SystemSessionProperties.getJoinDistributionType; +import static com.facebook.presto.sql.analyzer.FeaturesConfig.JoinDistributionType.AUTOMATIC; import static com.facebook.presto.sql.planner.optimizations.QueryCardinalityUtil.isAtMostScalar; import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.PARTITIONED; import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.REPLICATED; @@ -29,12 +38,20 @@ import static com.facebook.presto.sql.planner.plan.JoinNode.Type.LEFT; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.RIGHT; import static com.facebook.presto.sql.planner.plan.Patterns.join; +import static java.util.Objects.requireNonNull; public class DetermineJoinDistributionType implements Rule { private static final Pattern PATTERN = join().matching(joinNode -> !joinNode.getDistributionType().isPresent()); + private final CostComparator costComparator; + + public DetermineJoinDistributionType(CostComparator costComparator) + { + this.costComparator = requireNonNull(costComparator, "costComparator is null"); + } + @Override public Pattern getPattern() { @@ -42,33 +59,99 @@ public Pattern getPattern() } @Override - public Result apply(JoinNode node, Captures captures, Context context) + public Result apply(JoinNode joinNode, Captures captures, Context context) + { + JoinDistributionType joinDistributionType = getJoinDistributionType(context.getSession()); + if (joinDistributionType == AUTOMATIC) { + return Result.ofPlanNode(getCostBasedJoin(joinNode, context)); + } + return Result.ofPlanNode(getSyntacticOrderJoin(joinNode, context, joinDistributionType)); + } + + private PlanNode getCostBasedJoin(JoinNode joinNode, Context context) { - DistributionType distributionType = determineDistributionType(node, context); - return Result.ofPlanNode(node.withDistributionType(distributionType)); + CostProvider costProvider = context.getCostProvider(); + List possibleJoinNodes = new ArrayList<>(); + + if (!mustPartition(joinNode)) { + possibleJoinNodes.add(getJoinNodeWithCost(costProvider, joinNode.withDistributionType(REPLICATED))); + } + if (!mustReplicate(joinNode, context)) { + possibleJoinNodes.add(getJoinNodeWithCost(costProvider, joinNode.withDistributionType(PARTITIONED))); + } + + JoinNode flipped = joinNode.flipChildren(); + if (!mustPartition(flipped)) { + possibleJoinNodes.add(getJoinNodeWithCost(costProvider, flipped.withDistributionType(REPLICATED))); + } + if (!mustReplicate(flipped, context)) { + possibleJoinNodes.add(getJoinNodeWithCost(costProvider, flipped.withDistributionType(PARTITIONED))); + } + + if (possibleJoinNodes.stream().anyMatch(result -> result.getCost().hasUnknownComponents()) || possibleJoinNodes.isEmpty()) { + return getSyntacticOrderJoin(joinNode, context, AUTOMATIC); + } + + // Using Ordering to facilitate rule determinism + Ordering planNodeOrderings = costComparator.forSession(context.getSession()).onResultOf(PlanNodeWithCost::getCost); + return planNodeOrderings.min(possibleJoinNodes).getPlanNode(); } - private static DistributionType determineDistributionType(JoinNode node, Context context) + private PlanNode getSyntacticOrderJoin(JoinNode joinNode, Context context, JoinDistributionType joinDistributionType) { - JoinNode.Type type = node.getType(); - if (type == RIGHT || type == FULL) { - // With REPLICATED, the unmatched rows from right-side would be duplicated. - return PARTITIONED; + if (mustPartition(joinNode)) { + return joinNode.withDistributionType(PARTITIONED); + } + if (mustReplicate(joinNode, context)) { + return joinNode.withDistributionType(REPLICATED); + } + if (joinDistributionType.canPartition()) { + return joinNode.withDistributionType(PARTITIONED); } + return joinNode.withDistributionType(REPLICATED); + } + + private static boolean mustPartition(JoinNode joinNode) + { + JoinNode.Type type = joinNode.getType(); + // With REPLICATED, the unmatched rows from right-side would be duplicated. + return type == RIGHT || type == FULL; + } - if (node.getCriteria().isEmpty() && (type == INNER || type == LEFT)) { + private static boolean mustReplicate(JoinNode joinNode, Context context) + { + JoinNode.Type type = joinNode.getType(); + if (joinNode.getCriteria().isEmpty() && (type == INNER || type == LEFT)) { // There is nothing to partition on - return REPLICATED; + return true; } + return isAtMostScalar(joinNode.getRight(), context.getLookup()); + } + + private static PlanNodeWithCost getJoinNodeWithCost(CostProvider costProvider, JoinNode possibleJoinNode) + { + return new PlanNodeWithCost(costProvider.getCumulativeCost(possibleJoinNode), possibleJoinNode); + } + + private static class PlanNodeWithCost + { + private final PlanNode planNode; + private final PlanNodeCostEstimate cost; - if (isAtMostScalar(node.getRight(), context.getLookup())) { - return REPLICATED; + public PlanNodeWithCost(PlanNodeCostEstimate cost, PlanNode planNode) + { + this.cost = requireNonNull(cost, "cost is null"); + this.planNode = requireNonNull(planNode, "planNode is null"); } - if (getJoinDistributionType(context.getSession()).canPartition()) { - return PARTITIONED; + public PlanNode getPlanNode() + { + return planNode; } - return REPLICATED; + public PlanNodeCostEstimate getCost() + { + return cost; + } } } diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/QueryCardinalityUtil.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/QueryCardinalityUtil.java index a8138612a840f..6d0b9eb12af0f 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/QueryCardinalityUtil.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/optimizations/QueryCardinalityUtil.java @@ -134,6 +134,7 @@ public Range visitFilter(FilterNode node, Void context) return Range.atLeast(0L); } + @Override public Range visitValues(ValuesNode node, Void context) { return Range.singleton((long) node.getRows().size()); diff --git a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java index 2fcb0a543ec42..df6d98cf4878b 100644 --- a/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java +++ b/presto-main/src/main/java/com/facebook/presto/sql/planner/plan/JoinNode.java @@ -33,6 +33,8 @@ import java.util.stream.Stream; import static com.facebook.presto.sql.planner.SortExpressionExtractor.extractSortExpression; +import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.PARTITIONED; +import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.REPLICATED; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.FULL; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.INNER; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.LEFT; @@ -106,6 +108,21 @@ public JoinNode(@JsonProperty("id") PlanNodeId id, checkArgument(!(criteria.isEmpty() && leftHashSymbol.isPresent()), "Left hash symbol is only valid in an equijoin"); checkArgument(!(criteria.isEmpty() && rightHashSymbol.isPresent()), "Right hash symbol is only valid in an equijoin"); + + if (distributionType.isPresent()) { + // The implementation of full outer join only works if the data is hash partitioned. + checkArgument( + !(distributionType.get() == REPLICATED && (type == RIGHT || type == FULL)), + "%s join do not work with %s distribution type", + type, + distributionType.get()); + // It does not make sense to PARTITION when there is nothing to partition on + checkArgument( + !(distributionType.get() == PARTITIONED && criteria.isEmpty() && type != RIGHT && type != FULL), + "Equi criteria are empty, so %s join should not have %s distribution type", + type, + distributionType.get()); + } } public JoinNode flipChildren() diff --git a/presto-main/src/main/java/com/facebook/presto/util/MoreLists.java b/presto-main/src/main/java/com/facebook/presto/util/MoreLists.java index bcca89e809140..0e630b936c4ae 100644 --- a/presto-main/src/main/java/com/facebook/presto/util/MoreLists.java +++ b/presto-main/src/main/java/com/facebook/presto/util/MoreLists.java @@ -17,8 +17,11 @@ import java.util.List; import java.util.function.Function; +import java.util.function.IntFunction; import java.util.function.Predicate; +import java.util.stream.IntStream; +import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.collect.ImmutableList.toImmutableList; import static java.util.Objects.requireNonNull; @@ -49,5 +52,14 @@ public static List mappedCopy(List elements, Function mapper) .collect(toImmutableList()); } + public static List nElements(int n, IntFunction function) + { + checkArgument(n >= 0); + requireNonNull(function, "function is null"); + return IntStream.range(0, n) + .mapToObj(function) + .collect(toImmutableList()); + } + private MoreLists() {} } diff --git a/presto-main/src/test/java/com/facebook/presto/cost/TestComparisonStatsCalculator.java b/presto-main/src/test/java/com/facebook/presto/cost/TestComparisonStatsCalculator.java index cad46b31f3638..d0586f1390fa7 100644 --- a/presto-main/src/test/java/com/facebook/presto/cost/TestComparisonStatsCalculator.java +++ b/presto-main/src/test/java/com/facebook/presto/cost/TestComparisonStatsCalculator.java @@ -581,61 +581,61 @@ public void symbolToSymbolEqualStats() .symbolStats("z", equalTo(capNDV(zStats, rowCount))); // One symbol's range is within the other's - rowCount = 4.6875; + rowCount = 9.375; assertCalculate(new ComparisonExpression(EQUAL, new SymbolReference("x"), new SymbolReference("y"))) .outputRowsCount(rowCount) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(4) .lowValue(0) .highValue(5) - .distinctValuesCount(4.6875 /* min(rowCount, ndv in intersection */) + .distinctValuesCount(9.375 /* min(rowCount, ndv in intersection */) .nullsFraction(0); }) .symbolStats("y", symbolAssert -> { symbolAssert.averageRowSize(4) .lowValue(0) .highValue(5) - .distinctValuesCount(4.6875 /* min(rowCount, ndv in intersection */) + .distinctValuesCount(9.375 /* min(rowCount, ndv in intersection */) .nullsFraction(0); }) .symbolStats("z", equalTo(capNDV(zStats, rowCount))); // Partially overlapping ranges - rowCount = 8.4375; + rowCount = 16.875; assertCalculate(new ComparisonExpression(EQUAL, new SymbolReference("x"), new SymbolReference("w"))) .outputRowsCount(rowCount) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(6) .lowValue(0) .highValue(10) - .distinctValuesCount(8.4375 /* min(rowCount, ndv in intersection */) + .distinctValuesCount(16.875 /* min(rowCount, ndv in intersection */) .nullsFraction(0); }) .symbolStats("w", symbolAssert -> { symbolAssert.averageRowSize(6) .lowValue(0) .highValue(10) - .distinctValuesCount(8.4375 /* min(rowCount, ndv in intersection */) + .distinctValuesCount(16.875 /* min(rowCount, ndv in intersection */) .nullsFraction(0); }) .symbolStats("z", equalTo(capNDV(zStats, rowCount))); // None of the ranges is included in the other, and one symbol has much higher cardinality, so that it has bigger NDV in intersect than the other in total - rowCount = 1.125; + rowCount = 2.25; assertCalculate(new ComparisonExpression(EQUAL, new SymbolReference("x"), new SymbolReference("u"))) .outputRowsCount(rowCount) .symbolStats("x", symbolAssert -> { symbolAssert.averageRowSize(6) .lowValue(0) .highValue(10) - .distinctValuesCount(1.125 /* min(rowCount, ndv in intersection */) + .distinctValuesCount(2.25 /* min(rowCount, ndv in intersection */) .nullsFraction(0); }) .symbolStats("u", symbolAssert -> { symbolAssert.averageRowSize(6) .lowValue(0) .highValue(10) - .distinctValuesCount(1.125 /* min(rowCount, ndv in intersection */) + .distinctValuesCount(2.25 /* min(rowCount, ndv in intersection */) .nullsFraction(0); }) .symbolStats("z", equalTo(capNDV(zStats, rowCount))); @@ -653,7 +653,7 @@ public void symbolToSymbolNotEqual() .symbolStats("z", equalTo(capNDV(zStats, rowCount))); // One symbol's range is within the other's - rowCount = 370.3125; + rowCount = 365.625; assertCalculate(new ComparisonExpression(NOT_EQUAL, new SymbolReference("x"), new SymbolReference("y"))) .outputRowsCount(rowCount) .symbolStats("x", equalTo(capNDV(zeroNullsFraction(xStats), rowCount))) @@ -661,7 +661,7 @@ public void symbolToSymbolNotEqual() .symbolStats("z", equalTo(capNDV(zStats, rowCount))); // Partially overlapping ranges - rowCount = 666.5625; + rowCount = 658.125; assertCalculate(new ComparisonExpression(NOT_EQUAL, new SymbolReference("x"), new SymbolReference("w"))) .outputRowsCount(rowCount) .symbolStats("x", equalTo(capNDV(zeroNullsFraction(xStats), rowCount))) @@ -669,7 +669,7 @@ public void symbolToSymbolNotEqual() .symbolStats("z", equalTo(capNDV(zStats, rowCount))); // None of the ranges is included in the other, and one symbol has much higher cardinality, so that it has bigger NDV in intersect than the other in total - rowCount = 673.875; + rowCount = 672.75; assertCalculate(new ComparisonExpression(NOT_EQUAL, new SymbolReference("x"), new SymbolReference("u"))) .outputRowsCount(rowCount) .symbolStats("x", equalTo(capNDV(zeroNullsFraction(xStats), rowCount))) diff --git a/presto-main/src/test/java/com/facebook/presto/cost/TestFilterStatsCalculator.java b/presto-main/src/test/java/com/facebook/presto/cost/TestFilterStatsCalculator.java index 9adeb665da1e2..9e78c8a077fca 100644 --- a/presto-main/src/test/java/com/facebook/presto/cost/TestFilterStatsCalculator.java +++ b/presto-main/src/test/java/com/facebook/presto/cost/TestFilterStatsCalculator.java @@ -171,26 +171,28 @@ public void testComparison() assertExpression("-x > -3e0") .outputRowsCount(lessThan3Rows); - for (String minusThree : ImmutableList.of("DECIMAL '-3'", "-3e0", "(4e0-7e0)", "CAST(-3 AS DECIMAL)")) { - System.out.println(minusThree); - - assertExpression("x = " + minusThree) - .outputRowsCount(18.75) - .symbolStats(new Symbol("x"), symbolAssert -> - symbolAssert.averageRowSize(4.0) - .lowValue(-3) - .highValue(-3) - .distinctValuesCount(1) - .nullsFraction(0.0)); - - assertExpression("x < " + minusThree) - .outputRowsCount(262.5) - .symbolStats(new Symbol("x"), symbolAssert -> - symbolAssert.averageRowSize(4.0) - .lowValue(-10) - .highValue(-3) - .distinctValuesCount(14) - .nullsFraction(0.0)); + for (String minusThree : ImmutableList.of("DECIMAL '-3'", "-3e0", "(4e0-7e0)", "CAST(-3 AS DECIMAL(7,3))"/*, "CAST('1' AS BIGINT) - 4"*/)) { + for (String xEquals : ImmutableList.of("x = %s", "%s = x", "COALESCE(x * CAST(NULL AS BIGINT), x) = %s", "%s = CAST(x AS DOUBLE)")) { + assertExpression(format(xEquals, minusThree)) + .outputRowsCount(18.75) + .symbolStats(new Symbol("x"), symbolAssert -> + symbolAssert.averageRowSize(4.0) + .lowValue(-3) + .highValue(-3) + .distinctValuesCount(1) + .nullsFraction(0.0)); + } + + for (String xLessThan : ImmutableList.of("x < %s", "%s > x", "%s > CAST(x AS DOUBLE)")) { + assertExpression(format(xLessThan, minusThree)) + .outputRowsCount(262.5) + .symbolStats(new Symbol("x"), symbolAssert -> + symbolAssert.averageRowSize(4.0) + .lowValue(-10) + .highValue(-3) + .distinctValuesCount(14) + .nullsFraction(0.0)); + } } } @@ -223,6 +225,18 @@ public void testOrStats() .highValue(3) .distinctValuesCount(2) .nullsFraction(0)); + + assertExpression("x = 1e0 OR 'a' = 'b' OR x = 3e0") + .outputRowsCount(37.5) + .symbolStats(new Symbol("x"), symbolAssert -> + symbolAssert.averageRowSize(4.0) + .lowValue(1) + .highValue(3) + .distinctValuesCount(2) + .nullsFraction(0)); + + assertExpression("x = 1e0 OR (CAST('b' AS VARCHAR(3)) IN (CAST('a' AS VARCHAR(3)), CAST('b' AS VARCHAR(3)))) OR x = 3e0") + .equalTo(standardInputStatistics); } @Test @@ -278,6 +292,9 @@ public void testAndStats() .highValue(10) .distinctValuesCount(40) .nullsFraction(0.25)); + + assertExpression("'a' IN ('b', 'c') AND unknownRange = 3e0") + .outputRowsCount(0); } @Test @@ -431,6 +448,11 @@ public void testBetweenOperatorFilter() .lowValue(-100.0) .highValue(100.0) .nullsFraction(0.0)); + + assertExpression("'a' IN ('a', 'b')").equalTo(standardInputStatistics); + assertExpression("'a' IN ('b', 'c')").outputRowsCount(0); + assertExpression("CAST('b' AS VARCHAR(3)) IN (CAST('a' AS VARCHAR(3)), CAST('b' AS VARCHAR(3)))").equalTo(standardInputStatistics); + assertExpression("CAST('c' AS VARCHAR(3)) IN (CAST('a' AS VARCHAR(3)), CAST('b' AS VARCHAR(3)))").outputRowsCount(0); } @Test diff --git a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java index 27d697592ec0b..e35109f314712 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestPhasedExecutionSchedule.java @@ -47,7 +47,6 @@ import static com.facebook.presto.sql.planner.SystemPartitioningHandle.SOURCE_DISTRIBUTION; import static com.facebook.presto.sql.planner.plan.ExchangeNode.Type.REPARTITION; import static com.facebook.presto.sql.planner.plan.ExchangeNode.Type.REPLICATE; -import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.PARTITIONED; import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.REPLICATED; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.INNER; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.RIGHT; @@ -224,7 +223,7 @@ private static PlanFragment createJoinPlanFragment(JoinNode.Type joinType, Strin Optional.empty(), Optional.empty(), Optional.empty(), - Optional.of(PARTITIONED)); + Optional.empty()); return createFragment(planNode); } diff --git a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java index 779b1e594956b..50b6f8f2285d5 100644 --- a/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java +++ b/presto-main/src/test/java/com/facebook/presto/execution/scheduler/TestSourcePartitionedScheduler.java @@ -451,7 +451,7 @@ private static StageExecutionPlan createPlan(ConnectorSplitSource splitSource) Optional.empty(), Optional.empty(), Optional.empty(), - Optional.of(JoinNode.DistributionType.PARTITIONED)), + Optional.empty()), ImmutableMap.of(symbol, VARCHAR), SOURCE_DISTRIBUTION, ImmutableList.of(tableScanNodeId), diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java index 9454ba3efd983..70f91965ca270 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/assertions/PlanMatchPattern.java @@ -333,6 +333,11 @@ public static PlanMatchPattern semiJoin(String sourceSymbolAlias, String filteri return node(SemiJoinNode.class, source, filtering).with(new SemiJoinMatcher(sourceSymbolAlias, filteringSymbolAlias, outputAlias)); } + public static PlanMatchPattern join(JoinNode.Type joinType, ExpectedValueProvider expectedEquiCriteria, PlanMatchPattern left, PlanMatchPattern right) + { + return join(joinType, ImmutableList.of(expectedEquiCriteria), left, right); + } + public static PlanMatchPattern join(JoinNode.Type joinType, List> expectedEquiCriteria, PlanMatchPattern left, PlanMatchPattern right) { return join(joinType, expectedEquiCriteria, Optional.empty(), left, right); diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java index 260fee9ff3be8..1c37aed0899e3 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/TestDetermineJoinDistributionType.java @@ -13,13 +13,20 @@ */ package com.facebook.presto.sql.planner.iterative.rule; +import com.facebook.presto.cost.CostComparator; +import com.facebook.presto.cost.PlanNodeStatsEstimate; +import com.facebook.presto.cost.SymbolStatsEstimate; import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinDistributionType; -import com.facebook.presto.sql.planner.iterative.rule.test.BaseRuleTest; +import com.facebook.presto.sql.planner.Symbol; +import com.facebook.presto.sql.planner.iterative.rule.test.RuleTester; import com.facebook.presto.sql.planner.plan.JoinNode; import com.facebook.presto.sql.planner.plan.JoinNode.DistributionType; import com.facebook.presto.sql.planner.plan.JoinNode.Type; +import com.facebook.presto.sql.planner.plan.PlanNodeId; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import org.testng.annotations.AfterClass; +import org.testng.annotations.BeforeClass; import org.testng.annotations.Test; import java.util.Optional; @@ -32,6 +39,8 @@ import static com.facebook.presto.sql.planner.assertions.PlanMatchPattern.values; import static com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder.expression; import static com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder.expressions; +import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.PARTITIONED; +import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.REPLICATED; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.FULL; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.INNER; import static com.facebook.presto.sql.planner.plan.JoinNode.Type.LEFT; @@ -39,8 +48,29 @@ @Test(singleThreaded = true) public class TestDetermineJoinDistributionType - extends BaseRuleTest { + private static final CostComparator COST_COMPARATOR = new CostComparator(1, 1, 1); + + private RuleTester tester; + + @BeforeClass + public void setUp() + { + tester = new RuleTester(ImmutableList.of(), ImmutableMap.of(), Optional.of(4)); + } + + @AfterClass(alwaysRun = true) + public void tearDown() + { + tester.close(); + tester = null; + } + + private RuleTester tester() + { + return tester; + } + @Test public void testDetermineDistributionType() { @@ -59,7 +89,7 @@ public void testDetermineDistributionTypeForLeftOuter() private void testDetermineDistributionType(JoinDistributionType sessionDistributedJoin, Type joinType, DistributionType expectedDistribution) { - tester().assertThat(new DetermineJoinDistributionType()) + tester().assertThat(new DetermineJoinDistributionType(COST_COMPARATOR)) .on(p -> p.join( joinType, @@ -91,7 +121,7 @@ public void testRepartitionRightOuter() private void testRepartitionRightOuter(JoinDistributionType sessionDistributedJoin, Type joinType) { - tester().assertThat(new DetermineJoinDistributionType()) + tester().assertThat(new DetermineJoinDistributionType(COST_COMPARATOR)) .on(p -> p.join( joinType, @@ -113,7 +143,7 @@ private void testRepartitionRightOuter(JoinDistributionType sessionDistributedJo @Test public void testReplicateScalar() { - tester().assertThat(new DetermineJoinDistributionType()) + tester().assertThat(new DetermineJoinDistributionType(COST_COMPARATOR)) .on(p -> p.join( INNER, @@ -142,7 +172,7 @@ public void testReplicateNoEquiCriteria() private void testReplicateNoEquiCriteria(Type joinType) { - tester().assertThat(new DetermineJoinDistributionType()) + tester().assertThat(new DetermineJoinDistributionType(COST_COMPARATOR)) .on(p -> p.join( joinType, @@ -164,7 +194,7 @@ private void testReplicateNoEquiCriteria(Type joinType) @Test public void testRetainDistributionType() { - tester().assertThat(new DetermineJoinDistributionType()) + tester().assertThat(new DetermineJoinDistributionType(COST_COMPARATOR)) .on(p -> p.join( INNER, @@ -178,4 +208,262 @@ public void testRetainDistributionType() Optional.of(DistributionType.REPLICATED))) .doesNotFire(); } + + @Test + public void testFlipAndReplicateWhenOneTableMuchSmaller() + { + int aRows = 100; + int bRows = 10_000; + tester.assertThat(new DetermineJoinDistributionType(COST_COMPARATOR)) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 6400, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + INNER, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .matches(join( + INNER, + ImmutableList.of(equiJoinClause("B1", "A1")), + Optional.empty(), + Optional.of(REPLICATED), + values(ImmutableMap.of("B1", 0)), + values(ImmutableMap.of("A1", 0)))); + } + + @Test + public void testPartitionWhenRequiredBySession() + { + int aRows = 100; + int bRows = 10_000; + tester.assertThat(new DetermineJoinDistributionType(new CostComparator(1, 1, 1))) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 6400, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + INNER, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.PARTITIONED.name()) + .matches(join( + INNER, + ImmutableList.of(equiJoinClause("B1", "A1")), + Optional.empty(), + Optional.of(PARTITIONED), + values(ImmutableMap.of("B1", 0)), + values(ImmutableMap.of("A1", 0)))); + } + + @Test + public void testPartitionWhenBothTablesEqual() + { + int aRows = 10_000; + int bRows = 10_000; + tester.assertThat(new DetermineJoinDistributionType(new CostComparator(1, 1, 1))) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + INNER, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .matches(join( + INNER, + ImmutableList.of(equiJoinClause("A1", "B1")), + Optional.empty(), + Optional.of(PARTITIONED), + values(ImmutableMap.of("A1", 0)), + values(ImmutableMap.of("B1", 0)))); + } + + @Test + public void testReplicatesWhenRequiredBySession() + { + int aRows = 10_000; + int bRows = 10_000; + tester.assertThat(new DetermineJoinDistributionType(new CostComparator(1, 1, 1))) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + INNER, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.BROADCAST.name()) + .matches(join( + INNER, + ImmutableList.of(equiJoinClause("A1", "B1")), + Optional.empty(), + Optional.of(REPLICATED), + values(ImmutableMap.of("A1", 0)), + values(ImmutableMap.of("B1", 0)))); + } + + @Test + public void testPartitionFullOuterJoin() + { + int aRows = 10_000; + int bRows = 10; + tester.assertThat(new DetermineJoinDistributionType(new CostComparator(1, 1, 1))) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + FULL, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .matches(join( + FULL, + ImmutableList.of(equiJoinClause("A1", "B1")), + Optional.empty(), + Optional.of(PARTITIONED), + values(ImmutableMap.of("A1", 0)), + values(ImmutableMap.of("B1", 0)))); + } + + @Test + public void testPartitionRightOuterJoin() + { + int aRows = 10_000; + int bRows = 10; + tester.assertThat(new DetermineJoinDistributionType(new CostComparator(1, 1, 1))) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + RIGHT, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .matches(join( + RIGHT, + ImmutableList.of(equiJoinClause("A1", "B1")), + Optional.empty(), + Optional.of(PARTITIONED), + values(ImmutableMap.of("A1", 0)), + values(ImmutableMap.of("B1", 0)))); + } + + @Test + public void testReplicateLeftOuterJoin() + { + int aRows = 10_000; + int bRows = 10; + tester.assertThat(new DetermineJoinDistributionType(new CostComparator(75, 10, 15))) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + LEFT, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .matches(join( + LEFT, + ImmutableList.of(equiJoinClause("A1", "B1")), + Optional.empty(), + Optional.of(REPLICATED), + values(ImmutableMap.of("A1", 0)), + values(ImmutableMap.of("B1", 0)))); + } + + @Test + public void testFlipAndReplicateRightOuterJoin() + { + int aRows = 10; + int bRows = 1_000_000; + tester.assertThat(new DetermineJoinDistributionType(new CostComparator(75, 10, 15))) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.AUTOMATIC.name()) + .overrideStats("valuesA", PlanNodeStatsEstimate.builder() + .setOutputRowCount(aRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("A1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .overrideStats("valuesB", PlanNodeStatsEstimate.builder() + .setOutputRowCount(bRows) + .addSymbolStatistics(ImmutableMap.of(new Symbol("B1"), new SymbolStatsEstimate(0, 100, 0, 640000, 100))) + .build()) + .on(p -> + p.join( + RIGHT, + p.values(new PlanNodeId("valuesA"), aRows, p.symbol("A1", BIGINT)), + p.values(new PlanNodeId("valuesB"), bRows, p.symbol("B1", BIGINT)), + ImmutableList.of(new JoinNode.EquiJoinClause(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT))), + ImmutableList.of(p.symbol("A1", BIGINT), p.symbol("B1", BIGINT)), + Optional.empty())) + .matches(join( + LEFT, + ImmutableList.of(equiJoinClause("A1", "B1")), + Optional.empty(), + Optional.of(REPLICATED), + values(ImmutableMap.of("A1", 0)), + values(ImmutableMap.of("B1", 0)))); + } } diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java index 47bf96a0cff8f..d424ccf227d5d 100644 --- a/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/iterative/rule/test/PlanBuilder.java @@ -92,6 +92,7 @@ import static com.facebook.presto.spi.type.VarbinaryType.VARBINARY; import static com.facebook.presto.sql.planner.SystemPartitioningHandle.FIXED_HASH_DISTRIBUTION; import static com.facebook.presto.sql.planner.SystemPartitioningHandle.SINGLE_DISTRIBUTION; +import static com.facebook.presto.util.MoreLists.nElements; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkState; import static com.google.common.collect.ImmutableList.toImmutableList; @@ -163,7 +164,15 @@ public ValuesNode values(Symbol... columns) public ValuesNode values(PlanNodeId id, Symbol... columns) { - return values(id, ImmutableList.copyOf(columns), ImmutableList.of()); + return values(id, 0, columns); + } + + public ValuesNode values(PlanNodeId id, int rows, Symbol... columns) + { + return values( + id, + ImmutableList.copyOf(columns), + nElements(rows, row -> nElements(columns.length, cell -> (Expression) new NullLiteral()))); } public ValuesNode values(List columns, List> rows) diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/BaseCostBasedPlanTest.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/BaseCostBasedPlanTest.java new file mode 100644 index 0000000000000..ea7a53792164c --- /dev/null +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/BaseCostBasedPlanTest.java @@ -0,0 +1,240 @@ +/* + * 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 com.facebook.presto.sql.planner.optimizations; + +import com.facebook.presto.sql.planner.LogicalPlanner; +import com.facebook.presto.sql.planner.Partitioning; +import com.facebook.presto.sql.planner.Plan; +import com.facebook.presto.sql.planner.SimplePlanVisitor; +import com.facebook.presto.sql.planner.assertions.BasePlanTest; +import com.facebook.presto.sql.planner.plan.AggregationNode; +import com.facebook.presto.sql.planner.plan.ExchangeNode; +import com.facebook.presto.sql.planner.plan.JoinNode; +import com.facebook.presto.sql.planner.plan.SemiJoinNode; +import com.facebook.presto.sql.planner.plan.TableScanNode; +import com.facebook.presto.sql.planner.plan.ValuesNode; +import com.google.common.base.Strings; +import com.google.common.collect.ImmutableList; +import com.google.common.io.Files; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; + +import java.io.IOException; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.List; +import java.util.stream.Stream; + +import static com.facebook.presto.sql.planner.plan.JoinNode.DistributionType.REPLICATED; +import static com.facebook.presto.sql.planner.plan.JoinNode.Type.INNER; +import static com.facebook.presto.testing.TestngUtils.toDataProvider; +import static com.google.common.base.Preconditions.checkState; +import static java.lang.String.format; +import static java.nio.charset.StandardCharsets.UTF_8; +import static java.nio.file.Files.exists; +import static java.util.Locale.ENGLISH; +import static java.util.Objects.requireNonNull; +import static java.util.stream.Collectors.joining; +import static org.testng.Assert.assertEquals; + +public abstract class BaseCostBasedPlanTest + extends BasePlanTest +{ + public BaseCostBasedPlanTest(LocalQueryRunnerSupplier supplier) + { + super(supplier); + } + + protected abstract Stream getQueries(); + + protected abstract Path getExpectedJoinOrderingFile(String queryId); + + @DataProvider + public Object[][] getQueriesDataProvider() + { + return getQueries() + .collect(toDataProvider()); + } + + @Test(dataProvider = "getQueriesDataProvider") + public void test(Query query) + { + assertEquals(generateQueryPlan(resolve(query.queryFile)), read(resolve(getExpectedJoinOrderingFile(query.id)))); + } + + private Path resolve(Path path) + { + // Test is run with module as current working directory. generate() is run with project's top-level directory as current working directory. + if (exists(path)) { + return path; + } + Path fromParent = Paths.get("..").resolve(path); + checkState(exists(fromParent), "Unable to resolve: " + path); + return fromParent; + } + + public void generate() + throws Exception + { + initPlanTest(); + try { + getQueries() + .parallel() + .forEach(query -> { + try { + Files.write(generateQueryPlan(query.queryFile).getBytes(UTF_8), getExpectedJoinOrderingFile(query.id).toFile()); + System.out.println(query.id); + } + catch (IOException e) { + throw new RuntimeException(e); + } + }); + } + finally { + destroyPlanTest(); + } + } + + private static String read(Path file) + { + try { + return Files.asCharSource(file.toFile(), UTF_8).read(); + } + catch (IOException e) { + throw new RuntimeException(e); + } + } + + public static final class Query + { + private final String id; + private final Path queryFile; + + public Query(String id, Path queryFile) + { + this.id = requireNonNull(id, "id is null"); + this.queryFile = requireNonNull(queryFile, "queryFile is null"); + } + + @Override + public String toString() + { + // Keep toString() short, as this is used in @DataProvider + return id; + } + } + + private String generateQueryPlan(Path queryFile) + { + String sql = read(queryFile) + .replaceFirst(";", "") + .replace("${database}.${schema}.", "") + .replace("\"${database}\".\"${schema}\".\"${prefix}", "\""); + Plan plan = plan(sql, LogicalPlanner.Stage.OPTIMIZED_AND_VALIDATED, false); + + JoinOrderPrinter joinOrderPrinter = new JoinOrderPrinter(); + plan.getRoot().accept(joinOrderPrinter, 0); + return joinOrderPrinter.result().stream() + .collect(joining("\n", "", "\n")); + } + + private static class JoinOrderPrinter + extends SimplePlanVisitor + { + private final ImmutableList.Builder lines = ImmutableList.builder(); + + public List result() + { + return lines.build(); + } + + @Override + public Void visitJoin(JoinNode node, Integer indent) + { + JoinNode.DistributionType distributionType = node.getDistributionType() + .orElseThrow(() -> new IllegalStateException("Expected distribution type to be present")); + if (node.isCrossJoin()) { + checkState(node.getType() == INNER && distributionType == REPLICATED, "Expected CROSS JOIN to be INNER REPLICATED"); + lines.add(indentString(indent) + "cross join:"); + } + else { + lines.add(format("%sjoin (%s, %s):", indentString(indent), node.getType(), distributionType)); + } + + return visitPlan(node, indent + 1); + } + + @Override + public Void visitExchange(ExchangeNode node, Integer indent) + { + Partitioning partitioning = node.getPartitioningScheme().getPartitioning(); + lines.add(indentString(indent) + + format( + "%s exchange (%s, %s, %s)", + node.getScope().name().toLowerCase(ENGLISH), + node.getType(), + partitioning.getHandle(), + partitioning.getArguments().stream() + .map(Object::toString) + .sorted() // Currently, order of hash columns is not deterministic + .collect(joining(", ", "[", "]")))); + + return visitPlan(node, indent + 1); + } + + @Override + public Void visitAggregation(AggregationNode node, Integer indent) + { + lines.add(indentString(indent) + + format( + "%s aggregation over(%s)", + node.getStep().name().toLowerCase(ENGLISH), + node.getGroupingKeys().stream() + .map(Object::toString) + .sorted() + .collect(joining(", ")))); + + return visitPlan(node, indent + 1); + } + + @Override + public Void visitTableScan(TableScanNode node, Integer indent) + { + lines.add(format("%s%s", indentString(indent), node.getTable().getConnectorHandle())); + return null; + } + + @Override + public Void visitSemiJoin(final SemiJoinNode node, Integer indent) + { + lines.add(format("%ssemijoin (%s):", indentString(indent), node.getDistributionType().get())); + + return visitPlan(node, indent + 1); + } + + @Override + public Void visitValues(ValuesNode node, Integer indent) + { + lines.add(format("%svalues", indentString(indent))); + + return null; + } + + private static String indentString(int indent) + { + return Strings.repeat(" ", indent); + } + } +} diff --git a/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpchCostBasedPlan.java b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpchCostBasedPlan.java new file mode 100644 index 0000000000000..26b4d3ccf9a33 --- /dev/null +++ b/presto-main/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpchCostBasedPlan.java @@ -0,0 +1,102 @@ +/* + * 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 com.facebook.presto.sql.planner.optimizations; + +import com.facebook.presto.Session.SessionBuilder; +import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinDistributionType; +import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinReorderingStrategy; +import com.facebook.presto.testing.LocalQueryRunner; +import com.facebook.presto.tpch.ColumnNaming; +import com.facebook.presto.tpch.TpchConnectorFactory; +import com.google.common.collect.ImmutableMap; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static com.facebook.presto.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; +import static com.facebook.presto.SystemSessionProperties.JOIN_REORDERING_STRATEGY; +import static com.facebook.presto.testing.TestingSession.testSessionBuilder; +import static com.facebook.presto.tpch.TpchConnectorFactory.TPCH_COLUMN_NAMING_PROPERTY; +import static java.lang.String.format; + +/** + * This class tests cost-based optimization rules related to joins. It contains unmodified TPCH queries. + * This class is using TPCH connector configured in way to mock Hive connector with unpartitioned TPCH tables. + */ +public class TestTpchCostBasedPlan + extends BaseCostBasedPlanTest +{ + /* + * 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 TestTpchCostBasedPlan() + { + super(() -> { + String catalog = "local"; + 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()); + + LocalQueryRunner queryRunner = LocalQueryRunner.queryRunnerWithFakeNodeCountForStats(sessionBuilder.build(), 8); + queryRunner.createCatalog( + catalog, + new TpchConnectorFactory(1, false, false), + ImmutableMap.of(TPCH_COLUMN_NAMING_PROPERTY, ColumnNaming.SIMPLIFIED.name())); + return queryRunner; + }); + } + + @Override + protected Stream getQueries() + { + return IntStream.rangeClosed(1, 22) + .mapToObj(i -> format("q%02d", i)) + .map(queryId -> new Query(queryId, tpchQuery(queryId))); + } + + private static Path tpchQuery(String queryId) + { + return Paths.get(format("./presto-benchto-benchmarks/src/main/resources/sql/presto/tpch/%s.sql", queryId)); + } + + @Override + protected Path getExpectedJoinOrderingFile(String queryId) + { + return Paths.get(format("./presto-main/src/test/resources/tpch-join-ordering/%s.txt", 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 TestTpchCostBasedPlan().generate(); + } + } +} diff --git a/presto-main/src/test/resources/tpch-join-ordering/q01.txt b/presto-main/src/test/resources/tpch-join-ordering/q01.txt new file mode 100644 index 0000000000000..dd816aed96478 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q01.txt @@ -0,0 +1,8 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(linestatus, returnflag) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["linestatus", "returnflag"]) + partial aggregation over(linestatus, returnflag) + tpch:lineitem:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q02.txt b/presto-main/src/test/resources/tpch-join-ordering/q02.txt new file mode 100644 index 0000000000000..bed6c8143773d --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q02.txt @@ -0,0 +1,46 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + cross join: + join (RIGHT, PARTITIONED): + final aggregation over(partkey_15) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey_15"]) + partial aggregation over(partkey_15) + join (INNER, REPLICATED): + tpch:partsupp:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:region:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey_3"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["suppkey_4"]) + join (INNER, REPLICATED): + tpch:partsupp:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:part:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["suppkey"]) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:region:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-main/src/test/resources/tpch-join-ordering/q03.txt b/presto-main/src/test/resources/tpch-join-ordering/q03.txt new file mode 100644 index 0000000000000..ef7d14ed7556c --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q03.txt @@ -0,0 +1,15 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(orderdate, orderkey_3, shippriority) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderdate", "orderkey_3", "shippriority"]) + partial aggregation over(orderdate, orderkey_3, shippriority) + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:customer:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q04.txt b/presto-main/src/test/resources/tpch-join-ordering/q04.txt new file mode 100644 index 0000000000000..6b7b82e796247 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q04.txt @@ -0,0 +1,16 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(orderpriority) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderpriority"]) + partial aggregation over(orderpriority) + join (INNER, PARTITIONED): + final aggregation over(orderkey_0) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey_0"]) + partial aggregation over(orderkey_0) + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey"]) + tpch:orders:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q05.txt b/presto-main/src/test/resources/tpch-join-ordering/q05.txt new file mode 100644 index 0000000000000..7fe14fa96c1bd --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q05.txt @@ -0,0 +1,29 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(name_15) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["name_15"]) + partial aggregation over(name_15) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["custkey_0"]) + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["custkey"]) + join (INNER, REPLICATED): + tpch:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:region:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:supplier:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q06.txt b/presto-main/src/test/resources/tpch-join-ordering/q06.txt new file mode 100644 index 0000000000000..50dd592255141 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q06.txt @@ -0,0 +1,5 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpch:lineitem:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q07.txt b/presto-main/src/test/resources/tpch-join-ordering/q07.txt new file mode 100644 index 0000000000000..fea5d2dd8ee62 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q07.txt @@ -0,0 +1,29 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(expr_24, name_15, name_19) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_24", "name_15", "name_19"]) + partial aggregation over(expr_24, name_15, name_19) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["orderkey"]) + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey_3"]) + join (INNER, REPLICATED): + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q08.txt b/presto-main/src/test/resources/tpch-join-ordering/q08.txt new file mode 100644 index 0000000000000..811ac0f4cea0a --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q08.txt @@ -0,0 +1,38 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(expr) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr"]) + partial aggregation over(expr) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["suppkey_4"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["orderkey_7"]) + join (INNER, REPLICATED): + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:region:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey"]) + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:part:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["suppkey"]) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q09.txt b/presto-main/src/test/resources/tpch-join-ordering/q09.txt new file mode 100644 index 0000000000000..906b2ff73bbb4 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q09.txt @@ -0,0 +1,28 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(expr_18, name_15) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_18", "name_15"]) + partial aggregation over(expr_18, name_15) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpch:partsupp:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:part:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q10.txt b/presto-main/src/test/resources/tpch-join-ordering/q10.txt new file mode 100644 index 0000000000000..961034d1112a2 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q10.txt @@ -0,0 +1,19 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(acctbal, address, comment_4, custkey_3, name, name_7, phone) + local exchange (GATHER, SINGLE, []) + partial aggregation over(acctbal, address, comment_4, custkey_3, name, name_7, phone) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["custkey_3"]) + join (INNER, REPLICATED): + tpch:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["custkey"]) + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:orders:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q11.txt b/presto-main/src/test/resources/tpch-join-ordering/q11.txt new file mode 100644 index 0000000000000..0ec619a918cc4 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q11.txt @@ -0,0 +1,32 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + cross join: + final aggregation over(partkey) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey"]) + partial aggregation over(partkey) + join (INNER, REPLICATED): + tpch:partsupp:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpch:partsupp:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q12.txt b/presto-main/src/test/resources/tpch-join-ordering/q12.txt new file mode 100644 index 0000000000000..3c9b76e874994 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q12.txt @@ -0,0 +1,13 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(shipmode) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["shipmode"]) + partial aggregation over(shipmode) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["orderkey"]) + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey_0"]) + tpch:lineitem:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q13.txt b/presto-main/src/test/resources/tpch-join-ordering/q13.txt new file mode 100644 index 0000000000000..9b922f617616a --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q13.txt @@ -0,0 +1,16 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(count) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["count"]) + partial aggregation over(count) + final aggregation over(custkey) + local exchange (GATHER, SINGLE, []) + partial aggregation over(custkey) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["custkey_0"]) + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["custkey"]) + tpch:customer:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q14.txt b/presto-main/src/test/resources/tpch-join-ordering/q14.txt new file mode 100644 index 0000000000000..2ba08ad19a58c --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q14.txt @@ -0,0 +1,10 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["partkey_0"]) + tpch:part:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey"]) + tpch:lineitem:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q15.txt b/presto-main/src/test/resources/tpch-join-ordering/q15.txt new file mode 100644 index 0000000000000..4098ae2b253ab --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q15.txt @@ -0,0 +1,23 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["suppkey"]) + tpch:supplier:sf3000.0 + join (INNER, REPLICATED): + final aggregation over(suppkey_0) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["suppkey_0"]) + partial aggregation over(suppkey_0) + tpch:lineitem:sf3000.0 + 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(suppkey_16) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["suppkey_16"]) + partial aggregation over(suppkey_16) + tpch:lineitem:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q16.txt b/presto-main/src/test/resources/tpch-join-ordering/q16.txt new file mode 100644 index 0000000000000..7499b0a2bd59a --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q16.txt @@ -0,0 +1,21 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(brand, size, type) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["brand", "size", "type"]) + partial aggregation over(brand, size, type) + final aggregation over(brand, size, suppkey, type) + local exchange (GATHER, SINGLE, []) + partial aggregation over(brand, size, suppkey, type) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["suppkey"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["partkey"]) + tpch:partsupp:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey_0"]) + tpch:part:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["suppkey_3"]) + tpch:supplier:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q17.txt b/presto-main/src/test/resources/tpch-join-ordering/q17.txt new file mode 100644 index 0000000000000..38dbca27b537a --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q17.txt @@ -0,0 +1,22 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + cross join: + join (RIGHT, PARTITIONED): + final aggregation over(partkey_4) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey_4"]) + partial aggregation over(partkey_4) + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey"]) + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:part:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-main/src/test/resources/tpch-join-ordering/q18.txt b/presto-main/src/test/resources/tpch-join-ordering/q18.txt new file mode 100644 index 0000000000000..7cae108d34fb0 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q18.txt @@ -0,0 +1,24 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(custkey, name, orderdate, orderkey_3, totalprice) + local exchange (GATHER, SINGLE, []) + partial aggregation over(custkey, name, orderdate, orderkey_3, totalprice) + semijoin (PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["orderkey_3"]) + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["custkey_0"]) + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["custkey"]) + tpch:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey_6"]) + final aggregation over(orderkey_6) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey_6"]) + partial aggregation over(orderkey_6) + tpch:lineitem:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q19.txt b/presto-main/src/test/resources/tpch-join-ordering/q19.txt new file mode 100644 index 0000000000000..86be1c8953025 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q19.txt @@ -0,0 +1,10 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["partkey"]) + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey_0"]) + tpch:part:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q20.txt b/presto-main/src/test/resources/tpch-join-ordering/q20.txt new file mode 100644 index 0000000000000..a695298bc36ea --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q20.txt @@ -0,0 +1,31 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["suppkey"]) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["suppkey_4"]) + cross join: + join (RIGHT, PARTITIONED): + final aggregation over(partkey_18, suppkey_19) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey_18", "suppkey_19"]) + partial aggregation over(partkey_18, suppkey_19) + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey", "suppkey_4"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["partkey"]) + tpch:partsupp:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["partkey_8"]) + tpch:part:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-main/src/test/resources/tpch-join-ordering/q21.txt b/presto-main/src/test/resources/tpch-join-ordering/q21.txt new file mode 100644 index 0000000000000..429e48b71c109 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q21.txt @@ -0,0 +1,32 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["name"]) + partial aggregation over(name) + single aggregation over(commitdate, exists, name, name_7, nationkey, orderkey, orderstatus, receiptdate, suppkey_0, unique) + join (LEFT, PARTITIONED): + final aggregation over(commitdate, name, name_7, nationkey, orderkey, orderstatus, receiptdate, suppkey_0, unique_189) + local exchange (GATHER, SINGLE, []) + partial aggregation over(commitdate, name, name_7, nationkey, orderkey, orderstatus, receiptdate, suppkey_0, unique_189) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["orderkey_10"]) + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["orderkey"]) + join (INNER, REPLICATED): + tpch:lineitem:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpch:supplier:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpch:nation:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey_3"]) + tpch:orders:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["orderkey_92"]) + tpch:lineitem:sf3000.0 diff --git a/presto-main/src/test/resources/tpch-join-ordering/q22.txt b/presto-main/src/test/resources/tpch-join-ordering/q22.txt new file mode 100644 index 0000000000000..ba72e893faa84 --- /dev/null +++ b/presto-main/src/test/resources/tpch-join-ordering/q22.txt @@ -0,0 +1,23 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(substr) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["substr"]) + partial aggregation over(substr) + join (LEFT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["custkey"]) + cross join: + tpch:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpch:customer:sf3000.0 + final aggregation over(custkey_13) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["custkey_13"]) + partial aggregation over(custkey_13) + tpch:orders:sf3000.0 diff --git a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java index 484fc4baf2066..eaea759f039b8 100644 --- a/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java +++ b/presto-tests/src/main/java/com/facebook/presto/tests/AbstractTestQueries.java @@ -21,6 +21,7 @@ import com.facebook.presto.spi.type.Decimals; import com.facebook.presto.spi.type.SqlTimestampWithTimeZone; import com.facebook.presto.spi.type.VarcharType; +import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinDistributionType; import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinReorderingStrategy; import com.facebook.presto.sql.analyzer.SemanticException; import com.facebook.presto.testing.MaterializedResult; @@ -52,6 +53,7 @@ import java.util.stream.IntStream; import static com.facebook.presto.SystemSessionProperties.DISTRIBUTED_SORT; +import static com.facebook.presto.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; import static com.facebook.presto.SystemSessionProperties.JOIN_REORDERING_STRATEGY; import static com.facebook.presto.connector.informationSchema.InformationSchemaMetadata.INFORMATION_SCHEMA; import static com.facebook.presto.operator.scalar.ApplyFunction.APPLY_FUNCTION; @@ -8073,6 +8075,7 @@ protected Session noJoinReordering() { return Session.builder(getSession()) .setSystemProperty(JOIN_REORDERING_STRATEGY, JoinReorderingStrategy.NONE.name()) + .setSystemProperty(JOIN_DISTRIBUTION_TYPE, JoinDistributionType.PARTITIONED.name()) .build(); } } diff --git a/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java b/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java index 4d25162862b1e..5a1017603e1d8 100644 --- a/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java +++ b/presto-tests/src/test/java/com/facebook/presto/tests/TestTpchLocalStats.java @@ -157,7 +157,7 @@ public void testInnerJoinStats() statisticsAssertion.check("SELECT n1.n_nationkey FROM nation n1, nation n2 WHERE n1.n_nationkey + 1 = n2.n_nationkey - 1 AND n1.n_nationkey > 5 AND n2.n_nationkey < 20", // Join is over expressions so that predicate push down doesn't unify ranges of n_nationkey coming from n1 and n2. This, however, makes symbols // stats inaccurate (rules can't update them), so we don't verify them. - checks -> checks.estimate(OUTPUT_ROW_COUNT, absoluteError(3))); + checks -> checks.estimate(OUTPUT_ROW_COUNT, absoluteError(8))); // two joins on different keys statisticsAssertion.check("SELECT * FROM nation, supplier, partsupp WHERE n_nationkey = s_nationkey AND s_suppkey = ps_suppkey", diff --git a/presto-tpcds/pom.xml b/presto-tpcds/pom.xml index 6268768b0f6e9..3d30e8dc4d916 100644 --- a/presto-tpcds/pom.xml +++ b/presto-tpcds/pom.xml @@ -73,6 +73,13 @@ test + + com.facebook.presto + presto-main + test-jar + test + + com.facebook.presto presto-parser @@ -96,5 +103,17 @@ log-manager test + + + io.airlift + joni + test + + + + io.airlift + bytecode + test + diff --git a/presto-tpcds/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpcdsCostBasedPlan.java b/presto-tpcds/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpcdsCostBasedPlan.java new file mode 100644 index 0000000000000..64da78c950133 --- /dev/null +++ b/presto-tpcds/src/test/java/com/facebook/presto/sql/planner/optimizations/TestTpcdsCostBasedPlan.java @@ -0,0 +1,107 @@ +/* + * 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 com.facebook.presto.sql.planner.optimizations; + +import com.facebook.presto.Session; +import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinDistributionType; +import com.facebook.presto.sql.analyzer.FeaturesConfig.JoinReorderingStrategy; +import com.facebook.presto.testing.LocalQueryRunner; +import com.facebook.presto.tpcds.TpcdsConnectorFactory; +import com.google.common.collect.ImmutableMap; + +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.stream.IntStream; +import java.util.stream.Stream; + +import static com.facebook.presto.SystemSessionProperties.JOIN_DISTRIBUTION_TYPE; +import static com.facebook.presto.SystemSessionProperties.JOIN_REORDERING_STRATEGY; +import static com.facebook.presto.testing.TestingSession.testSessionBuilder; +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 TestTpcdsCostBasedPlan + extends BaseCostBasedPlanTest +{ + /* + * 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 TestTpcdsCostBasedPlan() + { + 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()); + + LocalQueryRunner queryRunner = LocalQueryRunner.queryRunnerWithFakeNodeCountForStats(sessionBuilder.build(), 8); + queryRunner.createCatalog( + catalog, + new TpcdsConnectorFactory(1), + ImmutableMap.of()); + return queryRunner; + }); + } + + @Override + protected Stream getQueries() + { + return IntStream.range(1, 100) + .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 -> new Query(queryId, tpcdsQuery(queryId))); + } + + private static Path tpcdsQuery(String queryId) + { + return Paths.get(format("./presto-benchto-benchmarks/src/main/resources/sql/presto/tpcds/%s.sql", queryId)); + } + + @Override + protected Path getExpectedJoinOrderingFile(String queryId) + { + return Paths.get(format("./presto-tpcds/src/test/resources/tpcds-join-ordering/%s.txt", 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 TestTpcdsCostBasedPlan().generate(); + } + } +} diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q01.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q01.txt new file mode 100644 index 0000000000000..ac64171441f78 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q01.txt @@ -0,0 +1,41 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cross join: + join (LEFT, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + 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): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + 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): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q02.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q02.txt new file mode 100644 index 0000000000000..c1b797d833685 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q02.txt @@ -0,0 +1,40 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + final aggregation over(d_week_seq) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq"]) + partial aggregation over(d_week_seq) + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["ws_sold_date_sk"]) + tpcds:web_sales:sf3000.0 + remote exchange (REPARTITION, HASH, ["cs_sold_date_sk"]) + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_83"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_395"]) + join (INNER, PARTITIONED): + final aggregation over(d_week_seq_232) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_232"]) + partial aggregation over(d_week_seq_232) + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["ws_sold_date_sk_132"]) + tpcds:web_sales:sf3000.0 + remote exchange (REPARTITION, HASH, ["cs_sold_date_sk_178"]) + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_228"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_316"]) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q03.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q03.txt new file mode 100644 index 0000000000000..ad5e1d3386815 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q03.txt @@ -0,0 +1,15 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(d_year, i_brand, i_brand_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year", "i_brand", "i_brand_id"]) + partial aggregation over(d_year, i_brand, i_brand_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q04.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q04.txt new file mode 100644 index 0000000000000..d0043bdf8ee4f --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q04.txt @@ -0,0 +1,183 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_id_206"]) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_id_206"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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): + values + values + values + 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): + values + values + values + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_599"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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): + values + values + values + 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): + values + values + values + 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): + values + values + values + remote exchange (REPARTITION, HASH, ["c_customer_id_747"]) + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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): + values + values + values + 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): + values + values + values + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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): + values + values + values + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_1778"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + 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): + values + values + values + 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): + values + values + values + remote exchange (GATHER, SINGLE, []) + 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): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_1660"]) + tpcds:customer:sf3000.0 + 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): + values + values + values + 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): + values + values + values + 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): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_2053"]) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q05.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q05.txt new file mode 100644 index 0000000000000..a3e6a0951f342 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q05.txt @@ -0,0 +1,66 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(channel$gid, groupid, id$gid) + local exchange (REPARTITION, HASH, ["channel$gid", "groupid", "id$gid"]) + remote exchange (REPARTITION, HASH, ["channel$gid", "groupid", "id$gid"]) + partial aggregation over(channel$gid, groupid, id$gid) + local exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(s_store_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_store_id"]) + partial aggregation over(s_store_id) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_store_sk_23"]) + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["ss_sold_date_sk"]) + tpcds:store_sales:sf3000.0 + remote exchange (REPARTITION, HASH, ["sr_returned_date_sk"]) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_store_sk"]) + tpcds:store:sf3000.0 + final aggregation over(cp_catalog_page_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cp_catalog_page_id"]) + partial aggregation over(cp_catalog_page_id) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_catalog_page_sk_106"]) + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["cs_sold_date_sk"]) + tpcds:catalog_sales:sf3000.0 + remote exchange (REPARTITION, HASH, ["cr_returned_date_sk"]) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_124"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cp_catalog_page_sk"]) + tpcds:catalog_page:sf3000.0 + final aggregation over(web_site_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["web_site_id"]) + partial aggregation over(web_site_id) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_web_site_sk_263"]) + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["ws_sold_date_sk"]) + tpcds:web_sales:sf3000.0 + remote exchange (REPARTITION, HASH, ["wr_returned_date_sk"]) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk_216", "ws_order_number_230"]) + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["wr_item_sk", "wr_order_number"]) + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_281"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["web_site_sk"]) + tpcds:web_site:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q06.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q06.txt new file mode 100644 index 0000000000000..e490771337e37 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q06.txt @@ -0,0 +1,48 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ca_state) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state"]) + partial aggregation over(ca_state) + cross join: + join (LEFT, REPLICATED): + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(d_month_seq_3) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_month_seq_3"]) + partial aggregation over(d_month_seq_3) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over(i_category_43) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_category_43"]) + partial aggregation over(i_category_43) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q07.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q07.txt new file mode 100644 index 0000000000000..87f01ff6251c4 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q07.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id"]) + partial aggregation over(i_item_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q08.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q08.txt new file mode 100644 index 0000000000000..969c093548807 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q08.txt @@ -0,0 +1,36 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_store_name"]) + partial aggregation over(s_store_name) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["substr_55"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["substr_56"]) + final aggregation over(expr_29) + local exchange (REPARTITION, HASH, ["expr_29"]) + remote exchange (REPARTITION, HASH, ["expr_47"]) + partial aggregation over(expr_47) + tpcds:customer_address:sf3000.0 + remote exchange (REPARTITION, HASH, ["expr_50"]) + partial aggregation over(expr_50) + final aggregation over(ca_zip_11) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_zip_11"]) + partial aggregation over(ca_zip_11) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ca_address_sk_2"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q09.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q09.txt new file mode 100644 index 0000000000000..1abe2ad402510 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q09.txt @@ -0,0 +1,93 @@ +cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + tpcds:reason:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + tpcds:store_sales:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q10.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q10.txt new file mode 100644 index 0000000000000..efc3007d92e7b --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q10.txt @@ -0,0 +1,50 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(cd_credit_rating, cd_dep_college_count, cd_dep_count, cd_dep_employed_count, cd_education_status, cd_gender, cd_marital_status, cd_purchase_estimate) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_credit_rating", "cd_dep_college_count", "cd_dep_count", "cd_dep_employed_count", "cd_education_status", "cd_gender", "cd_marital_status", "cd_purchase_estimate"]) + partial aggregation over(cd_credit_rating, cd_dep_college_count, cd_dep_count, cd_dep_employed_count, cd_education_status, cd_gender, cd_marital_status, cd_purchase_estimate) + join (RIGHT, PARTITIONED): + final aggregation over(cs_ship_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_ship_customer_sk"]) + partial aggregation over(cs_ship_customer_sk) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + join (RIGHT, PARTITIONED): + final aggregation over(ws_bill_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + partial aggregation over(ws_bill_customer_sk) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, REPLICATED): + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, PARTITIONED): + final aggregation over(ss_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + partial aggregation over(ss_customer_sk) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q11.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q11.txt new file mode 100644 index 0000000000000..5fbca1bff5824 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q11.txt @@ -0,0 +1,96 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_id_112"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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): + values + values + values + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_377"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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): + values + values + values + 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): + values + values + values + remote exchange (REPARTITION, HASH, ["c_customer_id_525"]) + 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): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_524"]) + tpcds:customer:sf3000.0 + 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): + values + values + values + 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): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_789"]) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q12.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q12.txt new file mode 100644 index 0000000000000..e7269d69a5010 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q12.txt @@ -0,0 +1,17 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_class"]) + final aggregation over(i_category, i_class, i_current_price, i_item_desc, i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_category", "i_class", "i_current_price", "i_item_desc", "i_item_id"]) + partial aggregation over(i_category, i_class, i_current_price, i_item_desc, i_item_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q13.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q13.txt new file mode 100644 index 0000000000000..e1988c4ba81c2 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q13.txt @@ -0,0 +1,25 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q14_1.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q14_1.txt new file mode 100644 index 0000000000000..42f01ee463431 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q14_1.txt @@ -0,0 +1,244 @@ +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, []) + 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) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_1"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_8", "i_category_id_12", "i_class_id_10"]) + tpcds:item:sf3000.0 + final aggregation over(expr_216, expr_217, expr_218) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_53", "i_category_id_57", "i_class_id_55"]) + partial aggregation over(i_brand_id_53, i_category_id_57, i_class_id_55) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_108", "i_category_id_112", "i_class_id_110"]) + partial aggregation over(i_brand_id_108, i_category_id_112, i_class_id_110) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_167", "i_category_id_171", "i_class_id_169"]) + partial aggregation over(i_brand_id_167, i_category_id_171, i_class_id_169) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk_482"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_552"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_559", "i_category_id_563", "i_class_id_561"]) + tpcds:item:sf3000.0 + final aggregation over(expr_836, expr_837, expr_838) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_604", "i_category_id_608", "i_class_id_606"]) + partial aggregation over(i_brand_id_604, i_category_id_608, i_class_id_606) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_694", "i_category_id_698", "i_class_id_696"]) + partial aggregation over(i_brand_id_694, i_category_id_698, i_class_id_696) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_787", "i_category_id_791", "i_class_id_789"]) + partial aggregation over(i_brand_id_787, i_category_id_791, i_class_id_789) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk_1097"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_1179"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_1186", "i_category_id_1190", "i_class_id_1188"]) + tpcds:item:sf3000.0 + final aggregation over(expr_1463, expr_1464, expr_1465) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_1231", "i_category_id_1235", "i_class_id_1233"]) + partial aggregation over(i_brand_id_1231, i_category_id_1235, i_class_id_1233) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_1321", "i_category_id_1325", "i_class_id_1323"]) + partial aggregation over(i_brand_id_1321, i_category_id_1325, i_class_id_1323) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_1414", "i_category_id_1418", "i_class_id_1416"]) + partial aggregation over(i_brand_id_1414, i_category_id_1418, i_class_id_1416) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q14_2.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q14_2.txt new file mode 100644 index 0000000000000..1709d67457894 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q14_2.txt @@ -0,0 +1,173 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + 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): + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_1"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_8", "i_category_id_12", "i_class_id_10"]) + tpcds:item:sf3000.0 + final aggregation over(expr_216, expr_217, expr_218) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_53", "i_category_id_57", "i_class_id_55"]) + partial aggregation over(i_brand_id_53, i_category_id_57, i_class_id_55) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_108", "i_category_id_112", "i_class_id_110"]) + partial aggregation over(i_brand_id_108, i_category_id_112, i_class_id_110) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_167", "i_category_id_171", "i_class_id_169"]) + partial aggregation over(i_brand_id_167, i_category_id_171, i_class_id_169) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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): + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_506"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_578"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_brand_id_585", "i_category_id_589", "i_class_id_587"]) + tpcds:item:sf3000.0 + final aggregation over(expr_862, expr_863, expr_864) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_id_630", "i_category_id_634", "i_class_id_632"]) + partial aggregation over(i_brand_id_630, i_category_id_634, i_class_id_632) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_720", "i_category_id_724", "i_class_id_722"]) + partial aggregation over(i_brand_id_720, i_category_id_724, i_class_id_722) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + remote exchange (REPARTITION, HASH, ["i_brand_id_813", "i_category_id_817", "i_class_id_815"]) + partial aggregation over(i_brand_id_813, i_category_id_817, i_class_id_815) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over() + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q15.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q15.txt new file mode 100644 index 0000000000000..534f6ad789230 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q15.txt @@ -0,0 +1,21 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ca_zip) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_zip"]) + partial aggregation over(ca_zip) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q16.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q16.txt new file mode 100644 index 0000000000000..2f8331a3294d3 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q16.txt @@ -0,0 +1,32 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + join (RIGHT, PARTITIONED): + final aggregation over(cr_order_number) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cr_order_number"]) + partial aggregation over(cr_order_number) + tpcds:catalog_returns:sf3000.0 + final aggregation over(ca_state, cc_county, cs_call_center_sk, cs_ext_ship_cost, cs_net_profit, cs_order_number, cs_ship_addr_sk, cs_ship_date_sk, cs_warehouse_sk, d_date, unique) + local exchange (GATHER, SINGLE, []) + partial aggregation over(ca_state, cc_county, cs_call_center_sk, cs_ext_ship_cost, cs_net_profit, cs_order_number, cs_ship_addr_sk, cs_ship_date_sk, cs_warehouse_sk, d_date, unique) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_order_number_17"]) + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:call_center:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q17.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q17.txt new file mode 100644 index 0000000000000..a6e67dbc36fd2 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q17.txt @@ -0,0 +1,37 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_item_desc, i_item_id, s_state) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_desc", "i_item_id", "s_state"]) + partial aggregation over(i_item_desc, i_item_id, s_state) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_sk", "ss_customer_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk", "ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_customer_sk", "sr_item_sk", "sr_ticket_number"]) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk", "cs_item_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q18.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q18.txt new file mode 100644 index 0000000000000..dc5ac2336b209 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q18.txt @@ -0,0 +1,33 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ca_country$gid, ca_county$gid, ca_state$gid, groupid, i_item_id$gid) + local exchange (REPARTITION, HASH, ["ca_country$gid", "ca_county$gid", "ca_state$gid", "groupid", "i_item_id$gid"]) + remote exchange (REPARTITION, HASH, ["ca_country$gid", "ca_county$gid", "ca_state$gid", "groupid", "i_item_id$gid"]) + partial aggregation over(ca_country$gid, ca_county$gid, ca_state$gid, groupid, i_item_id$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_cdemo_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_demo_sk_0"]) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q19.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q19.txt new file mode 100644 index 0000000000000..9ec68e3c1459c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q19.txt @@ -0,0 +1,29 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_brand, i_brand_id, i_manufact, i_manufact_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand", "i_brand_id", "i_manufact", "i_manufact_id"]) + partial aggregation over(i_brand, i_brand_id, i_manufact, i_manufact_id) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q20.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q20.txt new file mode 100644 index 0000000000000..a62a86a3633ce --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q20.txt @@ -0,0 +1,17 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_class"]) + final aggregation over(i_category, i_class, i_current_price, i_item_desc, i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_category", "i_class", "i_current_price", "i_item_desc", "i_item_id"]) + partial aggregation over(i_category, i_class, i_current_price, i_item_desc, i_item_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q21.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q21.txt new file mode 100644 index 0000000000000..335ae9ca0d347 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q21.txt @@ -0,0 +1,19 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_item_id, w_warehouse_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id", "w_warehouse_name"]) + partial aggregation over(i_item_id, w_warehouse_name) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q22.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q22.txt new file mode 100644 index 0000000000000..87196d1922c4a --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q22.txt @@ -0,0 +1,15 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(groupid, i_brand$gid, i_category$gid, i_class$gid, i_product_name$gid) + local exchange (REPARTITION, HASH, ["groupid", "i_brand$gid", "i_category$gid", "i_class$gid", "i_product_name$gid"]) + remote exchange (REPARTITION, HASH, ["groupid", "i_brand$gid", "i_category$gid", "i_class$gid", "i_product_name$gid"]) + partial aggregation over(groupid, i_brand$gid, i_category$gid, i_class$gid, i_product_name$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q23_1.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q23_1.txt new file mode 100644 index 0000000000000..783a52f95cb9a --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q23_1.txt @@ -0,0 +1,115 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + final aggregation over(d_date_3, ss_item_sk, substr) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_3", "ss_item_sk", "substr"]) + partial aggregation over(d_date_3, ss_item_sk, substr) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + cross join: + final aggregation over(c_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + partial aggregation over(c_customer_sk) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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(ss_customer_sk_90) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk_90"]) + partial aggregation over(ss_customer_sk_90) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + partial aggregation over() + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk_226"]) + final aggregation over(d_date_249, ss_item_sk_226, substr_297) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_249", "ss_item_sk_226", "substr_297"]) + partial aggregation over(d_date_249, ss_item_sk_226, substr_297) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_355"]) + cross join: + final aggregation over(c_customer_sk_355) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_355"]) + partial aggregation over(c_customer_sk_355) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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(ss_customer_sk_385) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk_385"]) + partial aggregation over(ss_customer_sk_385) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q23_2.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q23_2.txt new file mode 100644 index 0000000000000..6d330cbb1a52b --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q23_2.txt @@ -0,0 +1,130 @@ +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) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + final aggregation over(d_date_3, ss_item_sk, substr) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_3", "ss_item_sk", "substr"]) + partial aggregation over(d_date_3, ss_item_sk, substr) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_80"]) + cross join: + final aggregation over(c_customer_sk_80) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_80"]) + partial aggregation over(c_customer_sk_80) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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(ss_customer_sk_108) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk_108"]) + partial aggregation over(ss_customer_sk_108) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_221"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk_270"]) + final aggregation over(d_date_293, ss_item_sk_270, substr_341) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_293", "ss_item_sk_270", "substr_341"]) + partial aggregation over(d_date_293, ss_item_sk_270, substr_341) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_399"]) + cross join: + final aggregation over(c_customer_sk_399) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_399"]) + partial aggregation over(c_customer_sk_399) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + 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(ss_customer_sk_429) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk_429"]) + partial aggregation over(ss_customer_sk_429) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q24_1.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q24_1.txt new file mode 100644 index 0000000000000..5a46f7d002f9d --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q24_1.txt @@ -0,0 +1,64 @@ +remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + 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, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_81", "ss_ticket_number_88"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk_104", "sr_ticket_number_111"]) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q24_2.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q24_2.txt new file mode 100644 index 0000000000000..5a46f7d002f9d --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q24_2.txt @@ -0,0 +1,64 @@ +remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + 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, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_81", "ss_ticket_number_88"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk_104", "sr_ticket_number_111"]) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q25.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q25.txt new file mode 100644 index 0000000000000..26b97a8dccdaa --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q25.txt @@ -0,0 +1,37 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_item_desc, i_item_id, s_store_id, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_desc", "i_item_id", "s_store_id", "s_store_name"]) + partial aggregation over(i_item_desc, i_item_id, s_store_id, s_store_name) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_sk", "ss_customer_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk", "ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_customer_sk", "sr_item_sk", "sr_ticket_number"]) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk", "cs_item_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q26.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q26.txt new file mode 100644 index 0000000000000..8c890eb1b04e0 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q26.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id"]) + partial aggregation over(i_item_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q27.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q27.txt new file mode 100644 index 0000000000000..e5225b9801c8e --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q27.txt @@ -0,0 +1,24 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(groupid, i_item_id$gid, s_state$gid) + local exchange (REPARTITION, HASH, ["groupid", "i_item_id$gid", "s_state$gid"]) + remote exchange (REPARTITION, HASH, ["groupid", "i_item_id$gid", "s_state$gid"]) + partial aggregation over(groupid, i_item_id$gid, s_state$gid) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk"]) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q28.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q28.txt new file mode 100644 index 0000000000000..b3f2f5c2a8628 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q28.txt @@ -0,0 +1,47 @@ +cross join: + cross join: + cross join: + cross join: + cross join: + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_list_price"]) + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_list_price_27"]) + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_list_price_68"]) + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_list_price_109"]) + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_list_price_150"]) + tpcds:store_sales:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_list_price_191"]) + tpcds:store_sales:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q29.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q29.txt new file mode 100644 index 0000000000000..a5b7297f7cac8 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q29.txt @@ -0,0 +1,37 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_item_desc, i_item_id, s_store_id, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_desc", "i_item_id", "s_store_id", "s_store_name"]) + partial aggregation over(i_item_desc, i_item_id, s_store_id, s_store_name) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk", "cs_item_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk", "ss_customer_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk", "ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_customer_sk", "sr_item_sk", "sr_ticket_number"]) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q30.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q30.txt new file mode 100644 index 0000000000000..07406c089dc83 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q30.txt @@ -0,0 +1,50 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + 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): + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + 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): + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_82"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q31.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q31.txt new file mode 100644 index 0000000000000..b84060695edd1 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q31.txt @@ -0,0 +1,90 @@ +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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_county_173", NullableValue{type=integer, value=2000}, NullableValue{type=integer, value=2}]) + join (INNER, PARTITIONED): + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q32.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q32.txt new file mode 100644 index 0000000000000..06fa144dcc55d --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q32.txt @@ -0,0 +1,30 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + cross join: + join (RIGHT, PARTITIONED): + final aggregation over(cs_item_sk_15) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk_15"]) + partial aggregation over(cs_item_sk_15) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q33.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q33.txt new file mode 100644 index 0000000000000..28d7b9124e69d --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q33.txt @@ -0,0 +1,70 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(expr_266) + local exchange (REPARTITION, HASH, ["expr_266"]) + partial aggregation over(i_manufact_id) + final aggregation over(i_manufact_id) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_manufact_id) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_manufact_id"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_manufact_id_14"]) + tpcds:item:sf3000.0 + partial aggregation over(i_manufact_id_98) + final aggregation over(i_manufact_id_98) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_manufact_id_98) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_manufact_id_98"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_manufact_id_121"]) + tpcds:item:sf3000.0 + partial aggregation over(i_manufact_id_210) + final aggregation over(i_manufact_id_210) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_manufact_id_210) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_manufact_id_210"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_manufact_id_233"]) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q34.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q34.txt new file mode 100644 index 0000000000000..f32e13752c795 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q34.txt @@ -0,0 +1,25 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + final aggregation over(ss_customer_sk, ss_ticket_number) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk", "ss_ticket_number"]) + partial aggregation over(ss_customer_sk, ss_ticket_number) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q35.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q35.txt new file mode 100644 index 0000000000000..b3b1d78d78418 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q35.txt @@ -0,0 +1,49 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ca_state, cd_dep_college_count, cd_dep_count, cd_dep_employed_count, cd_gender, cd_marital_status) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_state", "cd_dep_college_count", "cd_dep_count", "cd_dep_employed_count", "cd_gender", "cd_marital_status"]) + partial aggregation over(ca_state, cd_dep_college_count, cd_dep_count, cd_dep_employed_count, cd_gender, cd_marital_status) + join (LEFT, PARTITIONED): + join (LEFT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_cdemo_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + final aggregation over(ss_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + partial aggregation over(ss_customer_sk) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_demo_sk"]) + tpcds:customer_demographics:sf3000.0 + final aggregation over(ws_bill_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + partial aggregation over(ws_bill_customer_sk) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + final aggregation over(cs_ship_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_ship_customer_sk"]) + partial aggregation over(cs_ship_customer_sk) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q36.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q36.txt new file mode 100644 index 0000000000000..cfc702690a868 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q36.txt @@ -0,0 +1,21 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_13", "expr_14"]) + final aggregation over(groupid, i_category$gid, i_class$gid) + local exchange (REPARTITION, HASH, ["groupid", "i_category$gid", "i_class$gid"]) + remote exchange (REPARTITION, HASH, ["groupid", "i_category$gid", "i_class$gid"]) + partial aggregation over(groupid, i_category$gid, i_class$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q37.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q37.txt new file mode 100644 index 0000000000000..79d9df424fcfb --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q37.txt @@ -0,0 +1,19 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_current_price, i_item_desc, i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_current_price", "i_item_desc", "i_item_id"]) + partial aggregation over(i_current_price, i_item_desc, i_item_id) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q38.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q38.txt new file mode 100644 index 0000000000000..fcbb12bdcc6b2 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q38.txt @@ -0,0 +1,50 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + final aggregation over(c_first_name_114, c_last_name_113, d_date_115) + local exchange (REPARTITION, HASH, ["c_first_name_114", "c_last_name_113", "d_date_115"]) + partial aggregation over(c_first_name, c_last_name, d_date) + final aggregation over(c_first_name, c_last_name, d_date) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name", "c_last_name", "d_date"]) + partial aggregation over(c_first_name, c_last_name, d_date) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + partial aggregation over(c_first_name_42, c_last_name_43, d_date_8) + final aggregation over(c_first_name_42, c_last_name_43, d_date_8) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name_42", "c_last_name_43", "d_date_8"]) + partial aggregation over(c_first_name_42, c_last_name_43, d_date_8) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_34"]) + tpcds:customer:sf3000.0 + partial aggregation over(c_first_name_97, c_last_name_98, d_date_63) + final aggregation over(c_first_name_97, c_last_name_98, d_date_63) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name_97", "c_last_name_98", "d_date_63"]) + partial aggregation over(c_first_name_97, c_last_name_98, d_date_63) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_89"]) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q39_1.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q39_1.txt new file mode 100644 index 0000000000000..b497104260b2c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q39_1.txt @@ -0,0 +1,41 @@ +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"]) + 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): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["inv_item_sk_63", "inv_warehouse_sk_64"]) + 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): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q39_2.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q39_2.txt new file mode 100644 index 0000000000000..b497104260b2c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q39_2.txt @@ -0,0 +1,41 @@ +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"]) + 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): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["inv_item_sk_63", "inv_warehouse_sk_64"]) + 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): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q40.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q40.txt new file mode 100644 index 0000000000000..2c992688da119 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q40.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_item_id, w_state) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id", "w_state"]) + partial aggregation over(i_item_id, w_state) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (LEFT, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q41.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q41.txt new file mode 100644 index 0000000000000..d8f92620bc579 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q41.txt @@ -0,0 +1,20 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_product_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_product_name"]) + partial aggregation over(i_product_name) + cross join: + join (LEFT, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over(i_manufact_14) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_manufact_14"]) + partial aggregation over(i_manufact_14) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q42.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q42.txt new file mode 100644 index 0000000000000..807d089555064 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q42.txt @@ -0,0 +1,15 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(d_year, i_category, i_category_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year", "i_category", "i_category_id"]) + partial aggregation over(d_year, i_category, i_category_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q43.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q43.txt new file mode 100644 index 0000000000000..75f997379ad67 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q43.txt @@ -0,0 +1,15 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(s_store_id, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_store_id", "s_store_name"]) + partial aggregation over(s_store_id, s_store_name) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q44.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q44.txt new file mode 100644 index 0000000000000..3d4dcb984307f --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q44.txt @@ -0,0 +1,50 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk_61"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["rank"]) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cross join: + final aggregation over(ss_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + partial aggregation over(ss_item_sk) + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ss_store_sk_13) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_store_sk_13"]) + partial aggregation over(ss_store_sk_13) + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["rank_131"]) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cross join: + final aggregation over(ss_item_sk_61) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk_61"]) + partial aggregation over(ss_item_sk_61) + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ss_store_sk_98) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_store_sk_98"]) + partial aggregation over(ss_store_sk_98) + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk"]) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_148"]) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q45.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q45.txt new file mode 100644 index 0000000000000..d8a5795f3584b --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q45.txt @@ -0,0 +1,30 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ca_city, ca_zip) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_city", "ca_zip"]) + partial aggregation over(ca_city, ca_zip) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_id"]) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_2"]) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q46.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q46.txt new file mode 100644 index 0000000000000..18da20c884835 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q46.txt @@ -0,0 +1,33 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + final aggregation over(ca_city, ss_addr_sk, ss_customer_sk, ss_ticket_number) + local exchange (GATHER, SINGLE, []) + partial aggregation over(ca_city, ss_addr_sk, ss_customer_sk, ss_ticket_number) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_26"]) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q47.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q47.txt new file mode 100644 index 0000000000000..6b92a8546525b --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q47.txt @@ -0,0 +1,61 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand", "i_category", "s_company_name", "s_store_name"]) + final aggregation over(d_moy, d_year, i_brand, i_category, s_company_name, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy", "d_year", "i_brand", "i_category", "s_company_name", "s_store_name"]) + partial aggregation over(d_moy, d_year, i_brand, i_category, s_company_name, s_store_name) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_73", "i_category_77", "s_company_name_155", "s_store_name_143"]) + final aggregation over(d_moy_118, d_year_116, i_brand_73, i_category_77, s_company_name_155, s_store_name_143) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy_118", "d_year_116", "i_brand_73", "i_category_77", "s_company_name_155", "s_store_name_143"]) + partial aggregation over(d_moy_118, d_year_116, i_brand_73, i_category_77, s_company_name_155, s_store_name_143) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand_250", "i_category_254", "s_company_name_332", "s_store_name_320"]) + final aggregation over(d_moy_295, d_year_293, i_brand_250, i_category_254, s_company_name_332, s_store_name_320) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy_295", "d_year_293", "i_brand_250", "i_category_254", "s_company_name_332", "s_store_name_320"]) + partial aggregation over(d_moy_295, d_year_293, i_brand_250, i_category_254, s_company_name_332, s_store_name_320) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q48.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q48.txt new file mode 100644 index 0000000000000..b1a10a3cc0fef --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q48.txt @@ -0,0 +1,22 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q49.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q49.txt new file mode 100644 index 0000000000000..fe24528fe260c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q49.txt @@ -0,0 +1,54 @@ +local exchange (GATHER, SINGLE, []) + final aggregation over(expr_244, expr_245, expr_246, expr_247, expr_248) + local exchange (REPARTITION, HASH, ["expr_244", "expr_245", "expr_246", "expr_247", "expr_248"]) + partial aggregation over(expr_12, expr_53, rank, rank_23, wr_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(wr_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["wr_item_sk"]) + partial aggregation over(wr_item_sk) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["wr_item_sk", "wr_order_number"]) + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk", "ws_order_number"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over(cr_item_sk, expr_101, expr_136, rank_113, rank_115) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(cr_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cr_item_sk"]) + partial aggregation over(cr_item_sk) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cr_item_sk", "cr_order_number"]) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk", "cs_order_number"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + partial aggregation over(expr_194, expr_239, rank_206, rank_208, sr_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(sr_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk"]) + partial aggregation over(sr_item_sk) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["sr_item_sk", "sr_ticket_number"]) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q50.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q50.txt new file mode 100644 index 0000000000000..3866ee6944c94 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q50.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(s_city, s_company_id, s_county, s_state, s_store_name, s_street_name, s_street_number, s_street_type, s_suite_number, s_zip) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_city", "s_company_id", "s_county", "s_state", "s_store_name", "s_street_name", "s_street_number", "s_street_type", "s_suite_number", "s_zip"]) + partial aggregation over(s_city, s_company_id, s_county, s_state, s_store_name, s_street_name, s_street_number, s_street_type, s_suite_number, s_zip) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q51.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q51.txt new file mode 100644 index 0000000000000..85816cc3ce2ff --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q51.txt @@ -0,0 +1,27 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_77"]) + join (FULL, PARTITIONED): + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + final aggregation over(d_date, ws_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date", "ws_item_sk"]) + partial aggregation over(d_date, ws_item_sk) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + final aggregation over(d_date_23, ss_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_23", "ss_item_sk"]) + partial aggregation over(d_date_23, ss_item_sk) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q52.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q52.txt new file mode 100644 index 0000000000000..210d24cac5c56 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q52.txt @@ -0,0 +1,15 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(d_year, i_brand, i_brand_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year", "i_brand", "i_brand_id"]) + partial aggregation over(d_year, i_brand, i_brand_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q53.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q53.txt new file mode 100644 index 0000000000000..48688b252c414 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q53.txt @@ -0,0 +1,21 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_manufact_id"]) + final aggregation over(d_qoy, i_manufact_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_qoy", "i_manufact_id"]) + partial aggregation over(d_qoy, i_manufact_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q54.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q54.txt new file mode 100644 index 0000000000000..dabe46cb5066b --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q54.txt @@ -0,0 +1,71 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(expr_134) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_134"]) + partial aggregation over(expr_134) + final aggregation over(cs_bill_customer_sk_13) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk_13"]) + partial aggregation over(cs_bill_customer_sk_13) + cross join: + cross join: + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_sold_date_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ca_county", "ca_state"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + join (INNER, PARTITIONED): + final aggregation over(c_current_addr_sk, cs_bill_customer_sk_13) + local exchange (GATHER, SINGLE, []) + partial aggregation over(c_current_addr_sk, cs_bill_customer_sk_13) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk_13"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_sold_date_sk_12"]) + join (INNER, PARTITIONED): + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + tpcds:catalog_sales:sf3000.0 + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk"]) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_county", "s_state"]) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_30"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(expr_86) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_86"]) + partial aggregation over(expr_86) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(expr_118) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_118"]) + partial aggregation over(expr_118) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q55.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q55.txt new file mode 100644 index 0000000000000..2a0f97ba73ee6 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q55.txt @@ -0,0 +1,15 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_brand, i_brand_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand", "i_brand_id"]) + partial aggregation over(i_brand, i_brand_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q56.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q56.txt new file mode 100644 index 0000000000000..2b55e218d2f10 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q56.txt @@ -0,0 +1,70 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(expr_266) + local exchange (REPARTITION, HASH, ["expr_266"]) + partial aggregation over(i_item_id) + final aggregation over(i_item_id) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_item_id) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_id"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_2"]) + tpcds:item:sf3000.0 + partial aggregation over(i_item_id_86) + final aggregation over(i_item_id_86) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_item_id_86) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_id_86"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_109"]) + tpcds:item:sf3000.0 + partial aggregation over(i_item_id_198) + final aggregation over(i_item_id_198) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_item_id_198) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_id_198"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_221"]) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q57.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q57.txt new file mode 100644 index 0000000000000..d7157d3b9c010 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q57.txt @@ -0,0 +1,61 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + 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): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:call_center:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_147", "i_brand_65", "i_category_69"]) + final aggregation over(cc_name_147, d_moy_121, d_year_119, i_brand_65, i_category_69) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_147", "d_moy_121", "d_year_119", "i_brand_65", "i_category_69"]) + partial aggregation over(cc_name_147, d_moy_121, d_year_119, i_brand_65, i_category_69) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:call_center:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_328", "i_brand_246", "i_category_250"]) + final aggregation over(cc_name_328, d_moy_302, d_year_300, i_brand_246, i_category_250) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name_328", "d_moy_302", "d_year_300", "i_brand_246", "i_category_250"]) + partial aggregation over(cc_name_328, d_moy_302, d_year_300, i_brand_246, i_category_250) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:call_center:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q58.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q58.txt new file mode 100644 index 0000000000000..e22814171c189 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q58.txt @@ -0,0 +1,76 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + final aggregation over(i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id"]) + partial aggregation over(i_item_id) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_date"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_3"]) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + tpcds:date_dim:sf3000.0 + final aggregation over(i_item_id_79) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_79"]) + partial aggregation over(i_item_id_79) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_date_102"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_131"]) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + tpcds:date_dim:sf3000.0 + final aggregation over(i_item_id_210) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_210"]) + partial aggregation over(i_item_id_210) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_date_233"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_262"]) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q59.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q59.txt new file mode 100644 index 0000000000000..27a56921f6884 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q59.txt @@ -0,0 +1,40 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_week_seq", "s_store_id"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + 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): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_361", "s_store_id_235"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + 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): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q60.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q60.txt new file mode 100644 index 0000000000000..2b55e218d2f10 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q60.txt @@ -0,0 +1,70 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(expr_266) + local exchange (REPARTITION, HASH, ["expr_266"]) + partial aggregation over(i_item_id) + final aggregation over(i_item_id) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_item_id) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_id"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_2"]) + tpcds:item:sf3000.0 + partial aggregation over(i_item_id_86) + final aggregation over(i_item_id_86) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_item_id_86) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_id_86"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_109"]) + tpcds:item:sf3000.0 + partial aggregation over(i_item_id_198) + final aggregation over(i_item_id_198) + local exchange (GATHER, SINGLE, []) + partial aggregation over(i_item_id_198) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_id_198"]) + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_221"]) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q61.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q61.txt new file mode 100644 index 0000000000000..a7f724684761d --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q61.txt @@ -0,0 +1,57 @@ +cross join: + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_customer_sk_7"]) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_84"]) + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q62.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q62.txt new file mode 100644 index 0000000000000..d760b0988879b --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q62.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(sm_type, substr, web_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sm_type", "substr", "web_name"]) + partial aggregation over(sm_type, substr, web_name) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:ship_mode:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_site:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q63.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q63.txt new file mode 100644 index 0000000000000..025ef6807b108 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q63.txt @@ -0,0 +1,21 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_manager_id"]) + final aggregation over(d_moy, i_manager_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy", "i_manager_id"]) + partial aggregation over(d_moy, i_manager_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q64.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q64.txt new file mode 100644 index 0000000000000..7f75d586ead3f --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q64.txt @@ -0,0 +1,175 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_sk", "s_store_name", "s_zip"]) + 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, i_item_sk, i_product_name, s_store_name, s_zip) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["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", "i_item_sk", "i_product_name", "s_store_name", "s_zip"]) + 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, i_item_sk, i_product_name, s_store_name, s_zip) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_addr_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over(cs_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + partial aggregation over(cs_item_sk) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk", "cs_order_number"]) + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cr_item_sk", "cr_order_number"]) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:income_band:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:income_band:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_92"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_573", "s_store_name_452", "s_zip_472"]) + 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, i_item_sk_573, i_product_name_594, s_store_name_452, s_zip_472) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["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", "i_item_sk_573", "i_product_name_594", "s_store_name_452", "s_zip_472"]) + 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, i_item_sk_573, i_product_name_594, s_store_name_452, s_zip_472) + 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, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over(cs_item_sk_292) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk_292"]) + partial aggregation over(cs_item_sk_292) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_item_sk_292", "cs_order_number_294"]) + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cr_item_sk_313", "cr_order_number_327"]) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:income_band:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:income_band:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_541"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_554"]) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q65.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q65.txt new file mode 100644 index 0000000000000..873f474b8b13b --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q65.txt @@ -0,0 +1,34 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + final aggregation over(ss_item_sk_26, ss_store_sk_31) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk_26", "ss_store_sk_31"]) + partial aggregation over(ss_item_sk_26, ss_store_sk_31) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["s_store_sk"]) + tpcds:store:sf3000.0 + final aggregation over(ss_store_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_store_sk"]) + partial aggregation over(ss_store_sk) + final aggregation over(ss_item_sk, ss_store_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_store_sk"]) + partial aggregation over(ss_item_sk, ss_store_sk) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q66.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q66.txt new file mode 100644 index 0000000000000..761a7f0e09856 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q66.txt @@ -0,0 +1,48 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(concat_306, d_year_307, w_city_302, w_country_305, w_county_303, w_state_304, w_warehouse_name_300, w_warehouse_sq_ft_301) + local exchange (REPARTITION, HASH, ["concat_306", "d_year_307", "w_city_302", "w_country_305", "w_county_303", "w_state_304", "w_warehouse_name_300", "w_warehouse_sq_ft_301"]) + partial aggregation over(concat, d_year, w_city, w_country, w_county, w_state, w_warehouse_name, w_warehouse_sq_ft) + final aggregation over(d_year, w_city, w_country, w_county, w_state, w_warehouse_name, w_warehouse_sq_ft) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year", "w_city", "w_country", "w_county", "w_state", "w_warehouse_name", "w_warehouse_sq_ft"]) + partial aggregation over(d_year, w_city, w_country, w_county, w_state, w_warehouse_name, w_warehouse_sq_ft) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:ship_mode:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 + partial aggregation over(concat_242, d_year_136, w_city_124, w_country_128, w_county_125, w_state_126, w_warehouse_name_118, w_warehouse_sq_ft_119) + final aggregation over(d_year_136, w_city_124, w_country_128, w_county_125, w_state_126, w_warehouse_name_118, w_warehouse_sq_ft_119) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year_136", "w_city_124", "w_country_128", "w_county_125", "w_state_126", "w_warehouse_name_118", "w_warehouse_sq_ft_119"]) + partial aggregation over(d_year_136, w_city_124, w_country_128, w_county_125, w_state_126, w_warehouse_name_118, w_warehouse_sq_ft_119) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:ship_mode:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q67.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q67.txt new file mode 100644 index 0000000000000..703f2e7f3e4de --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q67.txt @@ -0,0 +1,21 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_category$gid"]) + final aggregation over(d_moy$gid, d_qoy$gid, d_year$gid, groupid, i_brand$gid, i_category$gid, i_class$gid, i_product_name$gid, s_store_id$gid) + local exchange (REPARTITION, HASH, ["d_moy$gid", "d_qoy$gid", "d_year$gid", "groupid", "i_brand$gid", "i_category$gid", "i_class$gid", "i_product_name$gid", "s_store_id$gid"]) + remote exchange (REPARTITION, HASH, ["d_moy$gid", "d_qoy$gid", "d_year$gid", "groupid", "i_brand$gid", "i_category$gid", "i_class$gid", "i_product_name$gid", "s_store_id$gid"]) + partial aggregation over(d_moy$gid, d_qoy$gid, d_year$gid, groupid, i_brand$gid, i_category$gid, i_class$gid, i_product_name$gid, s_store_id$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q68.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q68.txt new file mode 100644 index 0000000000000..74853fb1b17dd --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q68.txt @@ -0,0 +1,33 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_current_addr_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + final aggregation over(ca_address_sk, ca_city, ss_customer_sk, ss_ticket_number) + local exchange (GATHER, SINGLE, []) + partial aggregation over(ca_address_sk, ca_city, ss_customer_sk, ss_ticket_number) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ca_address_sk"]) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_addr_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ca_address_sk_32"]) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q69.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q69.txt new file mode 100644 index 0000000000000..549e1834570ef --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q69.txt @@ -0,0 +1,51 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(cd_credit_rating, cd_education_status, cd_gender, cd_marital_status, cd_purchase_estimate) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_credit_rating", "cd_education_status", "cd_gender", "cd_marital_status", "cd_purchase_estimate"]) + partial aggregation over(cd_credit_rating, cd_education_status, cd_gender, cd_marital_status, cd_purchase_estimate) + join (RIGHT, PARTITIONED): + final aggregation over(cs_ship_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_ship_customer_sk"]) + partial aggregation over(cs_ship_customer_sk) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + join (RIGHT, PARTITIONED): + final aggregation over(ws_bill_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + partial aggregation over(ws_bill_customer_sk) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cd_demo_sk"]) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_current_cdemo_sk"]) + join (INNER, PARTITIONED): + final aggregation over(ss_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + partial aggregation over(ss_customer_sk) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q70.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q70.txt new file mode 100644 index 0000000000000..b130635f374b0 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q70.txt @@ -0,0 +1,34 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_110", "expr_111"]) + final aggregation over(groupid, s_county$gid, s_state$gid_102) + local exchange (REPARTITION, HASH, ["groupid", "s_county$gid", "s_state$gid_102"]) + remote exchange (REPARTITION, HASH, ["groupid", "s_county$gid", "s_state$gid_102"]) + partial aggregation over(groupid, s_county$gid, s_state$gid_102) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["s_state"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_state_48"]) + final aggregation over(s_state_48) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_state_48"]) + partial aggregation over(s_state_48) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q71.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q71.txt new file mode 100644 index 0000000000000..dd913fdd1d452 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q71.txt @@ -0,0 +1,34 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(i_brand, i_brand_id, t_hour, t_minute) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand", "i_brand_id", "t_hour", "t_minute"]) + partial aggregation over(i_brand, i_brand_id, t_hour, t_minute) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_sold_time_sk_87"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["i_item_sk"]) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + remote exchange (REPARTITION, HASH, ["cs_item_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + remote exchange (REPARTITION, HASH, ["ss_item_sk"]) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["t_time_sk"]) + tpcds:time_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q72.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q72.txt new file mode 100644 index 0000000000000..8385f549c9065 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q72.txt @@ -0,0 +1,48 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(d_week_seq_15, i_item_desc, w_warehouse_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_15", "i_item_desc", "w_warehouse_name"]) + partial aggregation over(d_week_seq_15, i_item_desc, w_warehouse_name) + join (LEFT, REPLICATED): + join (LEFT, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_week_seq_15", "inv_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk", "d_week_seq"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:catalog_returns:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q73.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q73.txt new file mode 100644 index 0000000000000..444813d2b4166 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q73.txt @@ -0,0 +1,25 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_sk"]) + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + final aggregation over(ss_customer_sk, ss_ticket_number) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk", "ss_ticket_number"]) + partial aggregation over(ss_customer_sk, ss_ticket_number) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q74.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q74.txt new file mode 100644 index 0000000000000..bb599437992a5 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q74.txt @@ -0,0 +1,96 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["c_customer_id_84"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + single aggregation over(c_customer_id_17, c_first_name_24, c_last_name_25, d_year_40) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + values + values + values + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_id_301"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (GATHER, SINGLE, []) + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + single aggregation over(c_customer_id_200, c_first_name_207, c_last_name_208, d_year_257) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + values + values + values + 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): + values + values + values + remote exchange (REPARTITION, HASH, ["c_customer_id_417"]) + 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): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_416"]) + tpcds:customer:sf3000.0 + 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): + values + values + values + 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): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_633"]) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q75.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q75.txt new file mode 100644 index 0000000000000..c52b70664357d --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q75.txt @@ -0,0 +1,105 @@ +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, expr_13, 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"]) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk", "cs_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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_84, expr_85, 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"]) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_ticket_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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_163, expr_164, 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"]) + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk", "ws_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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_358, expr_359, 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"]) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_item_sk_249", "cs_order_number_251"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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_473, expr_474, 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"]) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_item_sk_369", "ss_ticket_number_376"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + 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_610, expr_611, 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"]) + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk_492", "ws_order_number_506"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q76.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q76.txt new file mode 100644 index 0000000000000..b2379c78a67bc --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q76.txt @@ -0,0 +1,40 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(d_qoy_168, d_year_167, expr_165, expr_166, i_category_169) + local exchange (REPARTITION, HASH, ["d_qoy_168", "d_year_167", "expr_165", "expr_166", "i_category_169"]) + local exchange (REPARTITION, ROUND_ROBIN, []) + remote exchange (REPARTITION, HASH, ["d_qoy", "d_year", "expr_12", "expr_217", "i_category"]) + partial aggregation over(d_qoy, d_year, expr_12, expr_217, i_category) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + remote exchange (REPARTITION, HASH, ["d_qoy_49", "d_year_45", "expr_223", "expr_68", "i_category_29"]) + partial aggregation over(d_qoy_49, d_year_45, expr_223, expr_68, i_category_29) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_sold_date_sk"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_sk_17"]) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_sk_39"]) + tpcds:date_dim:sf3000.0 + remote exchange (REPARTITION, HASH, ["d_qoy_129", "d_year_125", "expr_147", "expr_160", "i_category_109"]) + partial aggregation over(d_qoy_129, d_year_125, expr_147, expr_160, i_category_109) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q77.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q77.txt new file mode 100644 index 0000000000000..df31b5b94fccd --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q77.txt @@ -0,0 +1,82 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(channel$gid, groupid, id$gid) + local exchange (REPARTITION, HASH, ["channel$gid", "groupid", "id$gid"]) + remote exchange (REPARTITION, HASH, ["channel$gid", "groupid", "id$gid"]) + partial aggregation over(channel$gid, groupid, id$gid) + local exchange (REPARTITION, ROUND_ROBIN, []) + join (LEFT, PARTITIONED): + final aggregation over(ss_store_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_store_sk"]) + partial aggregation over(ss_store_sk) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + final aggregation over(sr_store_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_store_sk"]) + partial aggregation over(sr_store_sk) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + cross join: + final aggregation over(cs_call_center_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_call_center_sk"]) + partial aggregation over(cs_call_center_sk) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + final aggregation over(cr_call_center_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cr_call_center_sk"]) + partial aggregation over(cr_call_center_sk) + join (INNER, REPLICATED): + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + join (LEFT, PARTITIONED): + final aggregation over(ws_web_page_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_web_page_sk"]) + partial aggregation over(ws_web_page_sk) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_page:sf3000.0 + final aggregation over(wr_web_page_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["wr_web_page_sk"]) + partial aggregation over(wr_web_page_sk) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_page:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q78.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q78.txt new file mode 100644 index 0000000000000..22463722d757c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q78.txt @@ -0,0 +1,48 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + final aggregation over(cs_bill_customer_sk, cs_item_sk, d_year_130) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk", "cs_item_sk", "d_year_130"]) + partial aggregation over(cs_bill_customer_sk, cs_item_sk, d_year_130) + join (INNER, REPLICATED): + join (LEFT, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + final aggregation over(d_year_53, ws_bill_customer_sk, ws_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year_53", "ws_bill_customer_sk", "ws_item_sk"]) + partial aggregation over(d_year_53, ws_bill_customer_sk, ws_item_sk) + join (INNER, REPLICATED): + join (LEFT, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + final aggregation over(d_year, ss_customer_sk, ss_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_year", "ss_customer_sk", "ss_item_sk"]) + partial aggregation over(d_year, ss_customer_sk, ss_item_sk) + join (INNER, REPLICATED): + join (LEFT, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q79.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q79.txt new file mode 100644 index 0000000000000..c9caa7231a669 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q79.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, REPLICATED): + final aggregation over(s_city, ss_addr_sk, ss_customer_sk, ss_ticket_number) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_city", "ss_addr_sk", "ss_customer_sk", "ss_ticket_number"]) + partial aggregation over(s_city, ss_addr_sk, ss_customer_sk, ss_ticket_number) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q80.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q80.txt new file mode 100644 index 0000000000000..9dec671463da4 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q80.txt @@ -0,0 +1,82 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(channel$gid, groupid, id$gid) + local exchange (REPARTITION, HASH, ["channel$gid", "groupid", "id$gid"]) + remote exchange (REPARTITION, HASH, ["channel$gid", "groupid", "id$gid"]) + partial aggregation over(channel$gid, groupid, id$gid) + local exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(s_store_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["s_store_id"]) + partial aggregation over(s_store_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (LEFT, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + final aggregation over(cp_catalog_page_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cp_catalog_page_id"]) + partial aggregation over(cp_catalog_page_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (LEFT, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:catalog_page:sf3000.0 + final aggregation over(web_site_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["web_site_id"]) + partial aggregation over(web_site_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (LEFT, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:promotion:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_site:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q81.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q81.txt new file mode 100644 index 0000000000000..73378ac6cf650 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q81.txt @@ -0,0 +1,48 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + cross join: + join (LEFT, REPLICATED): + join (INNER, REPLICATED): + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + 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, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q82.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q82.txt new file mode 100644 index 0000000000000..7b38a97bb2d68 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q82.txt @@ -0,0 +1,19 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(i_current_price, i_item_desc, i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_current_price", "i_item_desc", "i_item_id"]) + partial aggregation over(i_current_price, i_item_desc, i_item_id) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:inventory:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q83.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q83.txt new file mode 100644 index 0000000000000..c91525502256d --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q83.txt @@ -0,0 +1,73 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, PARTITIONED): + final aggregation over(i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id"]) + partial aggregation over(i_item_id) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_date"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_3"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_week_seq_5"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_34"]) + tpcds:date_dim:sf3000.0 + join (INNER, PARTITIONED): + final aggregation over(i_item_id_82) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_82"]) + partial aggregation over(i_item_id_82) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_date_105"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_134"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_week_seq_136"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_165"]) + tpcds:date_dim:sf3000.0 + final aggregation over(i_item_id_216) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_item_id_216"]) + partial aggregation over(i_item_id_216) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_date_239"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_date_268"]) + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["d_week_seq_270"]) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_week_seq_299"]) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q84.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q84.txt new file mode 100644 index 0000000000000..f850fc8d4e429 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q84.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + join (INNER, REPLICATED): + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:income_band:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q85.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q85.txt new file mode 100644 index 0000000000000..0253a1bcbc36c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q85.txt @@ -0,0 +1,37 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(r_reason_desc) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["r_reason_desc"]) + partial aggregation over(r_reason_desc) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cd_demo_sk_0", "cd_education_status_3", "cd_marital_status_2"]) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cd_education_status", "cd_marital_status", "wr_returning_cdemo_sk"]) + join (INNER, REPLICATED): + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_item_sk", "ws_order_number"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["wr_item_sk", "wr_order_number"]) + join (INNER, REPLICATED): + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_page:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:reason:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q86.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q86.txt new file mode 100644 index 0000000000000..988efac1109e7 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q86.txt @@ -0,0 +1,17 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["expr_10", "expr_9"]) + final aggregation over(groupid, i_category$gid, i_class$gid) + local exchange (REPARTITION, HASH, ["groupid", "i_category$gid", "i_class$gid"]) + remote exchange (REPARTITION, HASH, ["groupid", "i_category$gid", "i_class$gid"]) + partial aggregation over(groupid, i_category$gid, i_class$gid) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q87.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q87.txt new file mode 100644 index 0000000000000..90f388536b014 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q87.txt @@ -0,0 +1,50 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + final aggregation over(expr_130, expr_131, expr_132) + local exchange (REPARTITION, HASH, ["expr_130", "expr_131", "expr_132"]) + partial aggregation over(c_first_name, c_last_name, d_date) + final aggregation over(c_first_name, c_last_name, d_date) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name", "c_last_name", "d_date"]) + partial aggregation over(c_first_name, c_last_name, d_date) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer:sf3000.0 + partial aggregation over(c_first_name_47, c_last_name_48, d_date_13) + final aggregation over(c_first_name_47, c_last_name_48, d_date_13) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name_47", "c_last_name_48", "d_date_13"]) + partial aggregation over(c_first_name_47, c_last_name_48, d_date_13) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_39"]) + tpcds:customer:sf3000.0 + partial aggregation over(c_first_name_108, c_last_name_109, d_date_74) + final aggregation over(c_first_name_108, c_last_name_109, d_date_74) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_first_name_108", "c_last_name_109", "d_date_74"]) + partial aggregation over(c_first_name_108, c_last_name_109, d_date_74) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_bill_customer_sk"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["c_customer_sk_100"]) + tpcds:customer:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q88.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q88.txt new file mode 100644 index 0000000000000..2be00ac213dbc --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q88.txt @@ -0,0 +1,143 @@ +cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + cross join: + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q89.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q89.txt new file mode 100644 index 0000000000000..5fe7c88b21d68 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q89.txt @@ -0,0 +1,21 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_brand", "i_category", "s_company_name", "s_store_name"]) + final aggregation over(d_moy, i_brand, i_category, i_class, s_company_name, s_store_name) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["d_moy", "i_brand", "i_category", "i_class", "s_company_name", "s_store_name"]) + partial aggregation over(d_moy, i_brand, i_category, i_class, s_company_name, s_store_name) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q90.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q90.txt new file mode 100644 index 0000000000000..46988ff0c0d0c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q90.txt @@ -0,0 +1,35 @@ +cross join: + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_page:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_page:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q91.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q91.txt new file mode 100644 index 0000000000000..49086d2fa6703 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q91.txt @@ -0,0 +1,32 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + final aggregation over(cc_call_center_id, cc_manager, cc_name, cd_education_status, cd_marital_status) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_call_center_id", "cc_manager", "cc_name", "cd_education_status", "cd_marital_status"]) + partial aggregation over(cc_call_center_id, cc_manager, cc_name, cd_education_status, cd_marital_status) + join (INNER, REPLICATED): + tpcds:call_center:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:customer_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:catalog_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + join (INNER, REPLICATED): + tpcds:customer:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q92.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q92.txt new file mode 100644 index 0000000000000..e6916a4c9e2e6 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q92.txt @@ -0,0 +1,30 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + cross join: + join (RIGHT, PARTITIONED): + final aggregation over(ws_item_sk_3) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk_3"]) + partial aggregation over(ws_item_sk_3) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_item_sk"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + single aggregation over() + values diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q93.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q93.txt new file mode 100644 index 0000000000000..16dbfa0d7faed --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q93.txt @@ -0,0 +1,16 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(ss_customer_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk"]) + partial aggregation over(ss_customer_sk) + join (INNER, REPLICATED): + join (LEFT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ss_item_sk", "ss_ticket_number"]) + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["sr_item_sk", "sr_ticket_number"]) + tpcds:store_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:reason:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q94.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q94.txt new file mode 100644 index 0000000000000..8d84dff496434 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q94.txt @@ -0,0 +1,32 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + join (RIGHT, PARTITIONED): + final aggregation over(wr_order_number) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["wr_order_number"]) + partial aggregation over(wr_order_number) + tpcds:web_returns:sf3000.0 + final aggregation over(ca_state, d_date, unique, web_company_name, ws_ext_ship_cost, ws_net_profit, ws_order_number, ws_ship_addr_sk, ws_ship_date_sk, ws_warehouse_sk, ws_web_site_sk) + local exchange (GATHER, SINGLE, []) + partial aggregation over(ca_state, d_date, unique, web_company_name, ws_ext_ship_cost, ws_net_profit, ws_order_number, ws_ship_addr_sk, ws_ship_date_sk, ws_warehouse_sk, ws_web_site_sk) + join (RIGHT, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_order_number_17"]) + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_site:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q95.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q95.txt new file mode 100644 index 0000000000000..da67648080383 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q95.txt @@ -0,0 +1,41 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + local exchange (GATHER, SINGLE, []) + semijoin (PARTITIONED): + semijoin (PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_order_number"]) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:customer_address:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_site:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_order_number_17"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["ws_order_number_17"]) + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_order_number_51"]) + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["wr_order_number"]) + join (INNER, PARTITIONED): + remote exchange (REPARTITION, HASH, ["wr_order_number"]) + join (INNER, REPLICATED): + tpcds:web_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:web_returns:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ws_order_number_141"]) + tpcds:web_sales:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q96.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q96.txt new file mode 100644 index 0000000000000..41a3d5cf807c8 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q96.txt @@ -0,0 +1,17 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:time_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:household_demographics:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:store:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q97.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q97.txt new file mode 100644 index 0000000000000..d050b59b43211 --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q97.txt @@ -0,0 +1,23 @@ +final aggregation over() + local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + partial aggregation over() + join (FULL, PARTITIONED): + final aggregation over(ss_customer_sk, ss_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["ss_customer_sk", "ss_item_sk"]) + partial aggregation over(ss_customer_sk, ss_item_sk) + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + final aggregation over(cs_bill_customer_sk, cs_item_sk) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cs_bill_customer_sk", "cs_item_sk"]) + partial aggregation over(cs_bill_customer_sk, cs_item_sk) + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q98.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q98.txt new file mode 100644 index 0000000000000..19bc09d7ecf7c --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q98.txt @@ -0,0 +1,18 @@ +remote exchange (GATHER, SINGLE, []) + local exchange (GATHER, UNKNOWN, []) + remote exchange (REPARTITION, ROUND_ROBIN, []) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_class"]) + final aggregation over(i_category, i_class, i_current_price, i_item_desc, i_item_id) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["i_category", "i_class", "i_current_price", "i_item_desc", "i_item_id"]) + partial aggregation over(i_category, i_class, i_current_price, i_item_desc, i_item_id) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:store_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:item:sf3000.0 diff --git a/presto-tpcds/src/test/resources/tpcds-join-ordering/q99.txt b/presto-tpcds/src/test/resources/tpcds-join-ordering/q99.txt new file mode 100644 index 0000000000000..45360309aa92a --- /dev/null +++ b/presto-tpcds/src/test/resources/tpcds-join-ordering/q99.txt @@ -0,0 +1,23 @@ +local exchange (GATHER, SINGLE, []) + remote exchange (GATHER, SINGLE, []) + final aggregation over(cc_name, sm_type, substr) + local exchange (GATHER, SINGLE, []) + remote exchange (REPARTITION, HASH, ["cc_name", "sm_type", "substr"]) + partial aggregation over(cc_name, sm_type, substr) + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + join (INNER, REPLICATED): + tpcds:catalog_sales:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:date_dim:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:ship_mode:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:warehouse:sf3000.0 + local exchange (GATHER, SINGLE, []) + remote exchange (REPLICATE, BROADCAST, []) + tpcds:call_center:sf3000.0 diff --git a/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchConnectorFactory.java b/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchConnectorFactory.java index c566daa792450..89aeb63b84f3f 100644 --- a/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchConnectorFactory.java +++ b/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchConnectorFactory.java @@ -36,6 +36,7 @@ public class TpchConnectorFactory private final int defaultSplitsPerNode; private final boolean predicatePushdownEnabled; + private final boolean partitioningEnabled; public TpchConnectorFactory() { @@ -44,13 +45,14 @@ public TpchConnectorFactory() public TpchConnectorFactory(int defaultSplitsPerNode) { - this(defaultSplitsPerNode, true); + this(defaultSplitsPerNode, true, true); } - public TpchConnectorFactory(int defaultSplitsPerNode, boolean predicatePushdownEnabled) + public TpchConnectorFactory(int defaultSplitsPerNode, boolean predicatePushdownEnabled, boolean partitioningEnabled) { this.defaultSplitsPerNode = defaultSplitsPerNode; this.predicatePushdownEnabled = predicatePushdownEnabled; + this.partitioningEnabled = partitioningEnabled; } @Override @@ -83,7 +85,7 @@ public ConnectorTransactionHandle beginTransaction(IsolationLevel isolationLevel @Override public ConnectorMetadata getMetadata(ConnectorTransactionHandle transaction) { - return new TpchMetadata(catalogName, columnNaming, predicatePushdownEnabled); + return new TpchMetadata(catalogName, columnNaming, predicatePushdownEnabled, partitioningEnabled); } @Override diff --git a/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchMetadata.java b/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchMetadata.java index 4356920c38706..37077cf4f142e 100644 --- a/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchMetadata.java +++ b/presto-tpch/src/main/java/com/facebook/presto/tpch/TpchMetadata.java @@ -59,6 +59,7 @@ import io.airlift.tpch.TpchEntity; import io.airlift.tpch.TpchTable; +import java.time.LocalDate; import java.util.List; import java.util.Map; import java.util.Optional; @@ -118,13 +119,14 @@ public class TpchMetadata private final ColumnNaming columnNaming; private final StatisticsEstimator statisticsEstimator; private final boolean predicatePushdownEnabled; + private final boolean partitioningEnabled; public TpchMetadata(String connectorId) { - this(connectorId, ColumnNaming.SIMPLIFIED, true); + this(connectorId, ColumnNaming.SIMPLIFIED, true, true); } - public TpchMetadata(String connectorId, ColumnNaming columnNaming, boolean predicatePushdownEnabled) + public TpchMetadata(String connectorId, ColumnNaming columnNaming, boolean predicatePushdownEnabled, boolean partitioningEnabled) { ImmutableSet.Builder tableNames = ImmutableSet.builder(); for (TpchTable tpchTable : TpchTable.getTables()) { @@ -134,6 +136,7 @@ public TpchMetadata(String connectorId, ColumnNaming columnNaming, boolean predi this.connectorId = connectorId; this.columnNaming = columnNaming; this.predicatePushdownEnabled = predicatePushdownEnabled; + this.partitioningEnabled = partitioningEnabled; this.statisticsEstimator = createStatisticsEstimator(); } @@ -185,14 +188,16 @@ public List getTableLayouts( TupleDomain unenforcedConstraint = constraint.getSummary(); Map columns = getColumnHandles(session, tableHandle); if (tableHandle.getTableName().equals(TpchTable.ORDERS.getTableName())) { - ColumnHandle orderKeyColumn = columns.get(columnNaming.getName(OrderColumn.ORDER_KEY)); - nodePartition = Optional.of(new ConnectorTablePartitioning( - new TpchPartitioningHandle( - TpchTable.ORDERS.getTableName(), - calculateTotalRows(OrderGenerator.SCALE_BASE, tableHandle.getScaleFactor())), - ImmutableList.of(orderKeyColumn))); - partitioningColumns = Optional.of(ImmutableSet.of(orderKeyColumn)); - localProperties = ImmutableList.of(new SortingProperty<>(orderKeyColumn, SortOrder.ASC_NULLS_FIRST)); + if (partitioningEnabled) { + ColumnHandle orderKeyColumn = columns.get(columnNaming.getName(OrderColumn.ORDER_KEY)); + nodePartition = Optional.of(new ConnectorTablePartitioning( + new TpchPartitioningHandle( + TpchTable.ORDERS.getTableName(), + calculateTotalRows(OrderGenerator.SCALE_BASE, tableHandle.getScaleFactor())), + ImmutableList.of(orderKeyColumn))); + partitioningColumns = Optional.of(ImmutableSet.of(orderKeyColumn)); + localProperties = ImmutableList.of(new SortingProperty<>(orderKeyColumn, SortOrder.ASC_NULLS_FIRST)); + } if (predicatePushdownEnabled) { predicate = toTupleDomain(ImmutableMap.of( toColumnHandle(OrderColumn.ORDER_STATUS), @@ -210,22 +215,24 @@ else if (predicatePushdownEnabled && tableHandle.getTableName().equals(TpchTable unenforcedConstraint = filterOutColumnFromPredicate(unenforcedConstraint, toColumnHandle(PartColumn.TYPE)); } else if (tableHandle.getTableName().equals(TpchTable.LINE_ITEM.getTableName())) { - ColumnHandle orderKeyColumn = columns.get(columnNaming.getName(LineItemColumn.ORDER_KEY)); - nodePartition = Optional.of(new ConnectorTablePartitioning( - new TpchPartitioningHandle( - TpchTable.ORDERS.getTableName(), - calculateTotalRows(OrderGenerator.SCALE_BASE, tableHandle.getScaleFactor())), - ImmutableList.of(orderKeyColumn))); - partitioningColumns = Optional.of(ImmutableSet.of(orderKeyColumn)); - localProperties = ImmutableList.of( - new SortingProperty<>(orderKeyColumn, SortOrder.ASC_NULLS_FIRST), - new SortingProperty<>(columns.get(columnNaming.getName(LineItemColumn.LINE_NUMBER)), SortOrder.ASC_NULLS_FIRST)); + if (partitioningEnabled) { + ColumnHandle orderKeyColumn = columns.get(columnNaming.getName(LineItemColumn.ORDER_KEY)); + nodePartition = Optional.of(new ConnectorTablePartitioning( + new TpchPartitioningHandle( + TpchTable.ORDERS.getTableName(), + calculateTotalRows(OrderGenerator.SCALE_BASE, tableHandle.getScaleFactor())), + ImmutableList.of(orderKeyColumn))); + partitioningColumns = Optional.of(ImmutableSet.of(orderKeyColumn)); + localProperties = ImmutableList.of( + new SortingProperty<>(orderKeyColumn, SortOrder.ASC_NULLS_FIRST), + new SortingProperty<>(columns.get(columnNaming.getName(LineItemColumn.LINE_NUMBER)), SortOrder.ASC_NULLS_FIRST)); + } } ConnectorTableLayout layout = new ConnectorTableLayout( new TpchTableLayoutHandle(tableHandle, predicate), Optional.empty(), - predicate, // TODO: return well-known properties (e.g., orderkey > 0, etc) + predicate, // TODO: conditionally return well-known properties (e.g., orderkey > 0, etc) nodePartition, partitioningColumns, Optional.empty(), @@ -387,6 +394,9 @@ private Object toPrestoValue(Object tpchValue, Type columnType) if (columnType instanceof VarcharType) { return Slices.utf8Slice((String) tpchValue); } + if (tpchValue instanceof String && columnType.equals(DATE)) { + return LocalDate.parse((CharSequence) tpchValue).toEpochDay(); + } if (columnType.equals(BIGINT) || columnType.equals(INTEGER) || columnType.equals(DATE)) { return ((Number) tpchValue).longValue(); }