MD-703: Cannot select `_id` field from MapR-DB JSON Table

+ Included Smidth's fix for column shuffling.
+ Fix the private-drill-mapr-plugin build.


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

Branch: refs/heads/master
Commit: 5d36f8013829406f698610bc4a4f7185698365e6
Parents: 16d4ab8
Author: Aditya <adi...@mapr.com>
Authored: Thu Feb 4 16:43:27 2016 -0800
Committer: Aditya Kishore <a...@apache.org>
Committed: Fri Sep 9 10:08:35 2016 -0700

----------------------------------------------------------------------
 contrib/format-maprdb/pom.xml                   |  6 +++++
 .../exec/store/maprdb/MapRDBGroupScan.java      |  2 +-
 .../store/maprdb/MapRDBPushFilterIntoScan.java  |  4 ++--
 .../maprdb/json/MaprDBJsonRecordReader.java     | 24 ++++++++++++--------
 .../drill/maprdb/tests/json/TestSimpleJson.java |  4 ++--
 5 files changed, 26 insertions(+), 14 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/5d36f801/contrib/format-maprdb/pom.xml
----------------------------------------------------------------------
diff --git a/contrib/format-maprdb/pom.xml b/contrib/format-maprdb/pom.xml
index bcb6c29..db0572f 100644
--- a/contrib/format-maprdb/pom.xml
+++ b/contrib/format-maprdb/pom.xml
@@ -35,6 +35,7 @@
     <mapr.version>${project.parent.version}</mapr.version>
     <drill.version>${project.version}</drill.version>
     <hbase.version>0.98.12-mapr-1506</hbase.version>
+    <guava.version>18.0</guava.version>
     <maprdb.TestSuite>**/MaprDBTestsSuite.class</maprdb.TestSuite>
   </properties>
 
@@ -118,6 +119,11 @@
       </exclusions>
     </dependency>
     <dependency>
+      <groupId>com.google.guava</groupId>
+      <artifactId>guava</artifactId>
+      <version>${guava.version}</version>
+    </dependency>
+    <dependency>
       <groupId>org.apache.drill.exec</groupId>
       <artifactId>drill-java-exec</artifactId>
       <version>${drill.version}</version>

http://git-wip-us.apache.org/repos/asf/drill/blob/5d36f801/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBGroupScan.java
----------------------------------------------------------------------
diff --git 
a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBGroupScan.java
 
b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBGroupScan.java
index cbfb18c..4d30399 100644
--- 
a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBGroupScan.java
+++ 
b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBGroupScan.java
@@ -61,7 +61,7 @@ public abstract class MapRDBGroupScan extends 
AbstractGroupScan {
 
   private boolean filterPushedDown = false;
 
-  private Stopwatch watch = new Stopwatch();
+  private Stopwatch watch = Stopwatch.createUnstarted();
 
   private static final Comparator<List<MapRDBSubScanSpec>> 
LIST_SIZE_COMPARATOR = new Comparator<List<MapRDBSubScanSpec>>() {
     @Override

http://git-wip-us.apache.org/repos/asf/drill/blob/5d36f801/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBPushFilterIntoScan.java
----------------------------------------------------------------------
diff --git 
a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBPushFilterIntoScan.java
 
b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBPushFilterIntoScan.java
index 714221f..8a0902e 100644
--- 
a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBPushFilterIntoScan.java
+++ 
b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/MapRDBPushFilterIntoScan.java
@@ -90,11 +90,11 @@ public abstract class MapRDBPushFilterIntoScan extends 
StoragePluginOptimizerRul
 
       if (scan.getGroupScan() instanceof BinaryTableGroupScan) {
         BinaryTableGroupScan groupScan = 
(BinaryTableGroupScan)scan.getGroupScan();
-        doPushFilterIntoBinaryGroupScan(call, filter, null, scan, groupScan, 
condition);
+        doPushFilterIntoBinaryGroupScan(call, filter, project, scan, 
groupScan, condition);
       } else {
         assert(scan.getGroupScan() instanceof JsonTableGroupScan);
         JsonTableGroupScan groupScan = (JsonTableGroupScan)scan.getGroupScan();
-        doPushFilterIntoJsonGroupScan(call, filter, null, scan, groupScan, 
condition);
+        doPushFilterIntoJsonGroupScan(call, filter, project, scan, groupScan, 
condition);
       }
     }
 

http://git-wip-us.apache.org/repos/asf/drill/blob/5d36f801/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/json/MaprDBJsonRecordReader.java
----------------------------------------------------------------------
diff --git 
a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/json/MaprDBJsonRecordReader.java
 
b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/json/MaprDBJsonRecordReader.java
index 2e0e0c1..b69f4c4 100644
--- 
a/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/json/MaprDBJsonRecordReader.java
+++ 
b/contrib/format-maprdb/src/main/java/org/apache/drill/exec/store/maprdb/json/MaprDBJsonRecordReader.java
@@ -17,11 +17,9 @@
  */
 package org.apache.drill.exec.store.maprdb.json;
 
-import static org.ojai.DocumentConstants.ID_FIELD;
 import static org.ojai.DocumentConstants.ID_KEY;
 
 import java.nio.ByteBuffer;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
@@ -51,7 +49,6 @@ import org.ojai.store.QueryCondition;
 
 import com.google.common.base.Preconditions;
 import com.google.common.base.Stopwatch;
-import com.google.common.collect.Lists;
 import com.google.common.collect.Sets;
 import com.mapr.db.MapRDB;
 import com.mapr.db.Table;
@@ -98,18 +95,27 @@ public class MaprDBJsonRecordReader extends 
AbstractRecordReader {
   protected Collection<SchemaPath> transformColumns(Collection<SchemaPath> 
columns) {
     Set<SchemaPath> transformed = Sets.newLinkedHashSet();
     if (!isStarQuery()) {
-      ArrayList<Object> projectedFieldsList = Lists.newArrayList();
+      Set<FieldPath> projectedFieldsSet = Sets.newTreeSet();
       for (SchemaPath column : columns) {
         if (column.getRootSegment().getPath().equalsIgnoreCase(ID_KEY)) {
+          /*
+           * we do not include _id field in the set of projected fields
+           * because the DB currently can not return a document if only
+           * the _id field was projected. This should really be fixed in
+           * the DB client (Bug 21708) to avoid transferring the entire
+           * document when only _id is requested.
+           */
+          // projectedFieldsList.add(ID_FIELD);
           transformed.add(ID_PATH);
-          projectedFieldsList.add(ID_FIELD);
           includeId = true;
         } else {
           
transformed.add(SchemaPath.getSimplePath(column.getRootSegment().getPath()));
-          
projectedFieldsList.add(FieldPath.parseFrom(column.getAsUnescapedPath()));
+          
projectedFieldsSet.add(FieldPath.parseFrom(column.getAsUnescapedPath()));
         }
       }
-      projectedFields = projectedFieldsList.toArray(new 
FieldPath[projectedFieldsList.size()]);
+      if (projectedFieldsSet.size() > 0) {
+        projectedFields = projectedFieldsSet.toArray(new 
FieldPath[projectedFieldsSet.size()]);
+      }
     } else {
       transformed.add(ID_PATH);
       includeId = true;
@@ -135,7 +141,7 @@ public class MaprDBJsonRecordReader extends 
AbstractRecordReader {
 
   @Override
   public int next() {
-    Stopwatch watch = new Stopwatch();
+    Stopwatch watch = Stopwatch.createUnstarted();
     watch.start();
 
     writer.allocate();
@@ -230,7 +236,7 @@ public class MaprDBJsonRecordReader extends 
AbstractRecordReader {
         default:
           throw unsupportedError("Unsupported type: %s encountered during the 
query.", event);
         }
-      } catch (IllegalArgumentException e) {
+      } catch (IllegalStateException | IllegalArgumentException e) {
         logger.warn(String.format("Possible schema change at _id: '%s', field: 
'%s'",
             IdCodec.asString(reader.getId()), fieldName), e);
       }

http://git-wip-us.apache.org/repos/asf/drill/blob/5d36f801/contrib/format-maprdb/src/test/java/com/mapr/drill/maprdb/tests/json/TestSimpleJson.java
----------------------------------------------------------------------
diff --git 
a/contrib/format-maprdb/src/test/java/com/mapr/drill/maprdb/tests/json/TestSimpleJson.java
 
b/contrib/format-maprdb/src/test/java/com/mapr/drill/maprdb/tests/json/TestSimpleJson.java
index f05b87a..414b823 100644
--- 
a/contrib/format-maprdb/src/test/java/com/mapr/drill/maprdb/tests/json/TestSimpleJson.java
+++ 
b/contrib/format-maprdb/src/test/java/com/mapr/drill/maprdb/tests/json/TestSimpleJson.java
@@ -48,9 +48,9 @@ public class TestSimpleJson extends BaseTestQuery {
 
   @Test
   public void testMe() throws Exception {
-    setColumnWidths(new int[] {25, 40, 40, 40});
+    setColumnWidths(new int[] {23});
     final String sql = "SELECT\n"
-        + "  _id, name, categories, full_address\n"
+        + "  _id\n"
         + "FROM\n"
         + "  hbase.`business` business";
     runSQLAndVerifyCount(sql, 10);

Reply via email to