Repository: incubator-hawq
Updated Branches:
  refs/heads/master c8ef3a0ac -> 6e921df29


HAWQ-1057. Skip SARG_PUSHDOWN parameter if any of filters isn't supported.


Project: http://git-wip-us.apache.org/repos/asf/incubator-hawq/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-hawq/commit/6e921df2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-hawq/tree/6e921df2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-hawq/diff/6e921df2

Branch: refs/heads/master
Commit: 6e921df29d25d846b5d4916994c807b8b619662a
Parents: c8ef3a0
Author: Oleksandr Diachenko <odiache...@pivotal.io>
Authored: Tue Oct 18 15:57:02 2016 -0700
Committer: Oleksandr Diachenko <odiache...@pivotal.io>
Committed: Tue Oct 18 15:57:20 2016 -0700

----------------------------------------------------------------------
 .../hawq/pxf/plugins/hive/HiveORCAccessor.java  | 37 +++++++++++++++-----
 1 file changed, 28 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-hawq/blob/6e921df2/pxf/pxf-hive/src/main/java/org/apache/hawq/pxf/plugins/hive/HiveORCAccessor.java
----------------------------------------------------------------------
diff --git 
a/pxf/pxf-hive/src/main/java/org/apache/hawq/pxf/plugins/hive/HiveORCAccessor.java
 
b/pxf/pxf-hive/src/main/java/org/apache/hawq/pxf/plugins/hive/HiveORCAccessor.java
index ab2f96e..1cea9c7 100644
--- 
a/pxf/pxf-hive/src/main/java/org/apache/hawq/pxf/plugins/hive/HiveORCAccessor.java
+++ 
b/pxf/pxf-hive/src/main/java/org/apache/hawq/pxf/plugins/hive/HiveORCAccessor.java
@@ -20,6 +20,8 @@ package org.apache.hawq.pxf.plugins.hive;
  */
 
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.hive.ql.io.orc.OrcInputFormat;
 import org.apache.hadoop.hive.ql.io.sarg.SearchArgument;
 import org.apache.hadoop.hive.ql.io.sarg.SearchArgumentFactory;
@@ -41,6 +43,8 @@ import static 
org.apache.hawq.pxf.plugins.hive.HiveInputFormatFragmenter.PXF_HIV
  */
 public class HiveORCAccessor extends HiveAccessor {
 
+    private static final Log LOG = LogFactory.getLog(HiveORCAccessor.class);
+
     private final String READ_COLUMN_IDS_CONF_STR = 
"hive.io.file.readcolumn.ids";
     private final String READ_ALL_COLUMNS = "hive.io.file.read.all.columns";
     private final String READ_COLUMN_NAMES_CONF_STR = 
"hive.io.file.readcolumn.names";
@@ -106,18 +110,23 @@ public class HiveORCAccessor extends HiveAccessor {
          * need special case logic to make sure to still wrap the filter in a
          * startAnd() & end() block
          */
-        if (filter instanceof LogicalFilter)
-            buildExpression(filterBuilder, Arrays.asList(filter));
+        if (filter instanceof LogicalFilter) {
+            if (!buildExpression(filterBuilder, Arrays.asList(filter))) {
+                return;
+            }
+        }
         else {
             filterBuilder.startAnd();
-            buildArgument(filterBuilder, filter);
+            if(!buildArgument(filterBuilder, filter)) {
+                return;
+            }
             filterBuilder.end();
         }
         SearchArgument sarg = filterBuilder.build();
         jobConf.set(SARG_PUSHDOWN, sarg.toKryo());
     }
 
-    private void buildExpression(SearchArgument.Builder builder, List<Object> 
filterList) {
+    private boolean buildExpression(SearchArgument.Builder builder, 
List<Object> filterList) {
         for (Object f : filterList) {
             if (f instanceof LogicalFilter) {
                 switch(((LogicalFilter) f).getOperator()) {
@@ -131,15 +140,21 @@ public class HiveORCAccessor extends HiveAccessor {
                         builder.startNot();
                         break;
                 }
-                buildExpression(builder, ((LogicalFilter) f).getFilterList());
-                builder.end();
+                if (buildExpression(builder, ((LogicalFilter) 
f).getFilterList())) {
+                    builder.end();
+                } else {
+                    return false;
+                }
             } else {
-                buildArgument(builder, f);
+                if (!buildArgument(builder, f)) {
+                    return false;
+                }
             }
         }
+        return true;
     }
 
-    private void buildArgument(SearchArgument.Builder builder, Object 
filterObj) {
+    private boolean buildArgument(SearchArgument.Builder builder, Object 
filterObj) {
         /* The below functions will not be compatible and requires update  
with Hive 2.0 APIs */
         BasicFilter filter = (BasicFilter) filterObj;
         int filterColumnIndex = filter.getColumn().index();
@@ -166,8 +181,12 @@ public class HiveORCAccessor extends HiveAccessor {
             case HDOP_NE:
                 builder.startNot().equals(filterColumnName, filterValue).end();
                 break;
+            default: {
+                LOG.debug("Filter push-down is not supported for " + 
filter.getOperation() + "operation.");
+                return false;
+            }
         }
-        return;
+        return true;
     }
 
 }

Reply via email to