drill-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From amansi...@apache.org
Subject drill git commit: DRILL-1862: Create window function required distribution and collation traits conditionally.
Date Fri, 12 Jun 2015 05:12:16 GMT
Repository: drill
Updated Branches:
  refs/heads/master 3bccec911 -> fb1d3f384


DRILL-1862: Create window function required distribution and collation traits conditionally.


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/fb1d3f38
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/fb1d3f38
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/fb1d3f38

Branch: refs/heads/master
Commit: fb1d3f384e6c79a540e34e70f8268feb689208ee
Parents: 3bccec9
Author: Aman Sinha <asinha@maprtech.com>
Authored: Tue Jun 9 12:48:48 2015 -0700
Committer: Aman Sinha <asinha@maprtech.com>
Committed: Thu Jun 11 17:51:31 2015 -0700

----------------------------------------------------------------------
 .../exec/planner/physical/WindowPrule.java      | 28 ++++++++++++++----
 .../physical/impl/window/TestWindowFrame.java   | 31 ++++++++++----------
 2 files changed, 37 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/fb1d3f38/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
index db9218a..f7728c8 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/WindowPrule.java
@@ -22,7 +22,7 @@ import com.google.common.base.Predicate;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Iterables;
 import com.google.common.collect.Lists;
-import com.sun.java.swing.plaf.windows.resources.windows;
+
 import org.apache.calcite.linq4j.Ord;
 import org.apache.calcite.rel.core.Window;
 import org.apache.calcite.util.BitSets;
@@ -58,14 +58,25 @@ public class WindowPrule extends RelOptRule {
     // TODO: Order window based on existing partition by
     //input.getTraitSet().subsumes()
 
+    boolean partitionby = false;
     for (final Ord<Window.Group> w : Ord.zip(window.groups)) {
       Window.Group windowBase = w.getValue();
-      DrillDistributionTrait distOnAllKeys =
-          new DrillDistributionTrait(DrillDistributionTrait.DistributionType.HASH_DISTRIBUTED,
-              ImmutableList.copyOf(getDistributionFields(windowBase)));
+      RelTraitSet traits = call.getPlanner().emptyTraitSet().plus(Prel.DRILL_PHYSICAL);
+      if (windowBase.keys.size() > 0) {
+        DrillDistributionTrait distOnAllKeys =
+            new DrillDistributionTrait(DrillDistributionTrait.DistributionType.HASH_DISTRIBUTED,
+                ImmutableList.copyOf(getDistributionFields(windowBase)));
+
+        partitionby = true;
+        traits = traits.plus(distOnAllKeys);
+      }
+
+      // Add collation trait if either partition-by or order-by is specified.
+      if (partitionby || windowBase.orderKeys.getFieldCollations().size() > 0) {
+        RelCollation collation = getCollation(windowBase);
+        traits = traits.plus(collation);
+      }
 
-      RelCollation collation = getCollation(windowBase);
-      RelTraitSet traits = call.getPlanner().emptyTraitSet().plus(Prel.DRILL_PHYSICAL).plus(collation).plus(distOnAllKeys);
       final RelNode convertedInput = convert(input, traits);
 
       List<RelDataTypeField> newRowFields = Lists.newArrayList();
@@ -115,6 +126,11 @@ public class WindowPrule extends RelOptRule {
     call.transformTo(input);
   }
 
+  /**
+   * Create a RelCollation that has partition-by as the leading keys followed by order-by
keys
+   * @param window The window specification
+   * @return a RelCollation with {partition-by keys, order-by keys}
+   */
   private RelCollation getCollation(Window.Group window) {
     List<RelFieldCollation> fields = Lists.newArrayList();
     for (int group : BitSets.toIter(window.keys)) {

http://git-wip-us.apache.org/repos/asf/drill/blob/fb1d3f38/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/window/TestWindowFrame.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/window/TestWindowFrame.java
b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/window/TestWindowFrame.java
index 15fefa5..4295002 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/window/TestWindowFrame.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/window/TestWindowFrame.java
@@ -17,6 +17,8 @@
  ******************************************************************************/
 package org.apache.drill.exec.physical.impl.window;
 
+import java.util.Properties;
+
 import org.apache.drill.BaseTestQuery;
 import org.apache.drill.DrillTestWrapper;
 import org.apache.drill.common.config.DrillConfig;
@@ -25,8 +27,6 @@ import org.apache.drill.exec.ExecConstants;
 import org.junit.BeforeClass;
 import org.junit.Test;
 
-import java.util.Properties;
-
 public class TestWindowFrame extends BaseTestQuery {
 
   private static final String TEST_RES_PATH = TestTools.getWorkingPath() + "/src/test/resources";
@@ -63,15 +63,10 @@ public class TestWindowFrame extends BaseTestQuery {
   }
 
   private void runTest(final String tableName, final boolean withOrderBy) throws Exception
{
-    runSQL(String.format("alter session set `%s`= true", ExecConstants.ENABLE_WINDOW_FUNCTIONS));
 
-    try {
-      DrillTestWrapper testWrapper = withOrderBy ?
-        buildWindowWithOrderByQuery(tableName) : buildWindowQuery(tableName);
-      testWrapper.run();
-    } finally {
-      runSQL(String.format("alter session set `%s`= false", ExecConstants.ENABLE_WINDOW_FUNCTIONS));
-    }
+    DrillTestWrapper testWrapper = withOrderBy ?
+      buildWindowWithOrderByQuery(tableName) : buildWindowQuery(tableName);
+    testWrapper.run();
   }
 
   /**
@@ -170,13 +165,17 @@ public class TestWindowFrame extends BaseTestQuery {
 
   @Test // DRILL-3218
   public void testMaxVarChar() throws Exception {
-    runSQL(String.format("alter session set `%s`= true", ExecConstants.ENABLE_WINDOW_FUNCTIONS));
+    test("select max(cast(columns[2] as char(2))) over(partition by cast(columns[2] as char(2))
order by cast(columns[0] as int)) from dfs_test.`%s/window/allData.csv`", TEST_RES_PATH);
+  }
 
-    try {
-      test("select max(cast(columns[2] as char(2))) over(partition by cast(columns[2] as
char(2)) order by cast(columns[0] as int)) from dfs_test.`%s/window/allData.csv`", TEST_RES_PATH);
-    } finally {
-      runSQL(String.format("alter session set `%s`= false", ExecConstants.ENABLE_WINDOW_FUNCTIONS));
-    }
+  @Test // DRILL-1862
+  public void testEmptyPartitionBy() throws Exception {
+    test("SELECT employee_id, position_id, salary, SUM(salary) OVER(ORDER BY position_id)
FROM cp.`employee.json` LIMIT 10");
+  }
 
+  @Test // DRILL-3172
+  public void testEmptyOverClause() throws Exception {
+    test("SELECT employee_id, position_id, salary, SUM(salary) OVER() FROM cp.`employee.json`
LIMIT 10");
   }
+
 }


Mime
View raw message