This is an automated email from the ASF dual-hosted git repository.

jihoonson pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 9a293d5  remove UnionMergeRule rules from SQL planner (#9797)
9a293d5 is described below

commit 9a293d554df3d267ffeee71edc79f3cc5b1fa875
Author: Clint Wylie <[email protected]>
AuthorDate: Fri May 1 12:50:11 2020 -0700

    remove UnionMergeRule rules from SQL planner (#9797)
---
 .../apache/druid/benchmark/query/SqlBenchmark.java | 238 ++++++++++++++++++++-
 .../apache/druid/sql/calcite/planner/Rules.java    |   6 +-
 2 files changed, 237 insertions(+), 7 deletions(-)

diff --git 
a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java 
b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java
index 307042f..6c2de09 100644
--- 
a/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java
+++ 
b/benchmarks/src/test/java/org/apache/druid/benchmark/query/SqlBenchmark.java
@@ -70,8 +70,8 @@ import java.util.concurrent.TimeUnit;
  */
 @State(Scope.Benchmark)
 @Fork(value = 1)
-@Warmup(iterations = 15)
-@Measurement(iterations = 25)
+@Warmup(iterations = 5)
+@Measurement(iterations = 15)
 public class SqlBenchmark
 {
   static {
@@ -148,7 +148,225 @@ public class SqlBenchmark
 
       // 17, 18: GroupBy long, filter by long, unordered; with and without 
aggregators
       "SELECT maxLongUniform FROM foo WHERE maxLongUniform > 10 GROUP BY 1",
-      "SELECT maxLongUniform, SUM(sumLongSequential), COUNT(*) FROM foo WHERE 
maxLongUniform > 10 GROUP BY 1"
+      "SELECT maxLongUniform, SUM(sumLongSequential), COUNT(*) FROM foo WHERE 
maxLongUniform > 10 GROUP BY 1",
+      // 19: ultra mega union matrix
+      "WITH matrix (dimZipf, dimSequential) AS (\n"
+      + "  (\n"
+      + "    SELECT '100', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '100'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '110', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '110'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '120', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '120'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '130', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '130'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '140', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '140'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '150', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '150'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '160', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '160'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '170', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '170'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '180', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '180'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '190', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '190'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '200', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '200'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '210', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '210'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '220', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '220'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '230', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '230'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '240', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '240'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '250', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '250'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '260', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '260'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '270', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '270'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '280', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '280'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '290', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '290'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '300', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '300'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '310', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '310'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '320', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '320'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '330', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '330'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '340', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '340'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '350', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '350'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '360', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '360'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '370', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '370'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT '380', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE dimZipf = '380'\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + "UNION ALL\n"
+      + "  (\n"
+      + "    SELECT 'other', dimSequential\n"
+      + "    FROM (SELECT * FROM foo WHERE dimUniform != 1)\n"
+      + "    WHERE\n"
+      + "      dimZipf NOT IN (\n"
+      + "        '100', '110', '120', '130', '140', '150', '160', '170', 
'180', '190',\n"
+      + "        '200', '210', '220', '230', '240', '250', '260', '270', 
'280', '290',\n"
+      + "        '300', '310', '320', '330', '340', '350', '360', '370', 
'380'\n"
+      + "      )\n"
+      + "    GROUP BY dimSequential\n"
+      + "  )\n"
+      + ")\n"
+      + "SELECT * FROM matrix"
   );
 
   @Param({"5000000"})
@@ -226,4 +444,18 @@ public class SqlBenchmark
       blackhole.consume(lastRow);
     }
   }
+
+  @Benchmark
+  @BenchmarkMode(Mode.AverageTime)
+  @OutputTimeUnit(TimeUnit.MILLISECONDS)
+  public void planSql(Blackhole blackhole) throws Exception
+  {
+    final Map<String, Object> context = ImmutableMap.of("vectorize", 
vectorize);
+    final AuthenticationResult authenticationResult = 
NoopEscalator.getInstance()
+                                                                   
.createEscalatedAuthenticationResult();
+    try (final DruidPlanner planner = plannerFactory.createPlanner(context, 
ImmutableList.of(), authenticationResult)) {
+      final PlannerResult plannerResult = 
planner.plan(QUERIES.get(Integer.parseInt(query)));
+      blackhole.consume(plannerResult);
+    }
+  }
 }
diff --git a/sql/src/main/java/org/apache/druid/sql/calcite/planner/Rules.java 
b/sql/src/main/java/org/apache/druid/sql/calcite/planner/Rules.java
index 7b12ee7..3ac79aa 100644
--- a/sql/src/main/java/org/apache/druid/sql/calcite/planner/Rules.java
+++ b/sql/src/main/java/org/apache/druid/sql/calcite/planner/Rules.java
@@ -63,7 +63,6 @@ import 
org.apache.calcite.rel.rules.SortRemoveConstantKeysRule;
 import org.apache.calcite.rel.rules.SortRemoveRule;
 import org.apache.calcite.rel.rules.SortUnionTransposeRule;
 import org.apache.calcite.rel.rules.TableScanRule;
-import org.apache.calcite.rel.rules.UnionMergeRule;
 import org.apache.calcite.rel.rules.UnionPullUpConstantsRule;
 import org.apache.calcite.rel.rules.UnionToDistinctRule;
 import org.apache.calcite.rel.rules.ValuesReduceRule;
@@ -141,6 +140,8 @@ public class Rules
 
   // Rules from RelOptUtil's registerAbstractRules.
   // Omit DateRangeRules due to 
https://issues.apache.org/jira/browse/CALCITE-1601
+  // Omit UnionMergeRule since it isn't very effective given how Druid unions 
currently operate and is potentially
+  // expensive in terms of planning time.
   private static final List<RelOptRule> ABSTRACT_RULES =
       ImmutableList.of(
           AggregateProjectPullUpConstantsRule.INSTANCE2,
@@ -155,9 +156,6 @@ public class Rules
           PruneEmptyRules.JOIN_LEFT_INSTANCE,
           PruneEmptyRules.JOIN_RIGHT_INSTANCE,
           PruneEmptyRules.SORT_FETCH_ZERO_INSTANCE,
-          UnionMergeRule.INSTANCE,
-          UnionMergeRule.INTERSECT_INSTANCE,
-          UnionMergeRule.MINUS_INSTANCE,
           ProjectToWindowRule.PROJECT,
           FilterMergeRule.INSTANCE,
           IntersectToDistinctRule.INSTANCE


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to