You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by js...@apache.org on 2015/06/29 08:32:44 UTC

[1/3] drill git commit: Update sqlline version to drill-r5

Repository: drill
Updated Branches:
  refs/heads/master a52889cdb -> a915085e8


Update sqlline version to drill-r5


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

Branch: refs/heads/master
Commit: e659f0149f3255997324f415d7a1a535c5bf1573
Parents: a52889c
Author: Jason Altekruse <al...@gmail.com>
Authored: Mon May 18 17:01:28 2015 -0700
Committer: Jason Altekruse <al...@gmail.com>
Committed: Sun Jun 28 20:39:33 2015 -0700

----------------------------------------------------------------------
 pom.xml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/e659f014/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 724bcb2..ba7047f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1220,7 +1220,7 @@
           <dependency>
             <groupId>sqlline</groupId>
             <artifactId>sqlline</artifactId>
-            <version>1.1.9-drill-r4</version>
+            <version>1.1.9-drill-r5</version>
           </dependency>
 
           <dependency>
@@ -1564,7 +1564,7 @@
           <dependency>
             <groupId>sqlline</groupId>
             <artifactId>sqlline</artifactId>
-            <version>1.1.9-drill-r4</version>
+            <version>1.1.9-drill-r5</version>
           </dependency>
           <!-- Test Dependencies -->
           <dependency>


[3/3] drill git commit: DRILL-3370: Flatten failure with a filter condition.

Posted by js...@apache.org.
DRILL-3370: Flatten failure with a filter condition.

Fix required excluding flatten from the PushFilterPastProjectRule.


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

Branch: refs/heads/master
Commit: a915085e8a8b4255ff659086d047cc5dd874a5bf
Parents: 233faf2
Author: Jason Altekruse <al...@gmail.com>
Authored: Thu Jun 25 18:44:46 2015 -0700
Committer: Jason Altekruse <al...@gmail.com>
Committed: Sun Jun 28 22:28:32 2015 -0700

----------------------------------------------------------------------
 .../planner/logical/DrillPushFilterPastProjectRule.java | 12 +++++++-----
 .../drill/exec/physical/impl/flatten/TestFlatten.java   | 11 +++++++++++
 .../src/test/resources/flatten/drill-3370.json          |  5 +++++
 3 files changed, 23 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/a915085e/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushFilterPastProjectRule.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushFilterPastProjectRule.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushFilterPastProjectRule.java
index 3755ea1..0dba24e 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushFilterPastProjectRule.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushFilterPastProjectRule.java
@@ -37,14 +37,15 @@ public class DrillPushFilterPastProjectRule extends RelOptRule {
 
   public final static RelOptRule INSTANCE = new DrillPushFilterPastProjectRule();
 
-  private RexCall findItemOperator(
+  private RexCall findItemOrFlatten(
       final RexNode node,
       final List<RexNode> projExprs) {
     try {
       RexVisitor<Void> visitor =
           new RexVisitorImpl<Void>(true) {
         public Void visitCall(RexCall call) {
-          if ("item".equals(call.getOperator().getName().toLowerCase())) {
+          if ("item".equals(call.getOperator().getName().toLowerCase()) ||
+            "flatten".equals(call.getOperator().getName().toLowerCase())) {
             throw new Util.FoundOne(call); /* throw exception to interrupt tree walk (this is similar to
                                               other utility methods in RexUtil.java */
           }
@@ -56,7 +57,8 @@ public class DrillPushFilterPastProjectRule extends RelOptRule {
           RexNode n = projExprs.get(index);
           if (n instanceof RexCall) {
             RexCall r = (RexCall) n;
-            if ("item".equals(r.getOperator().getName().toLowerCase())) {
+            if ("item".equals(r.getOperator().getName().toLowerCase()) ||
+                "flatten".equals(r.getOperator().getName().toLowerCase())) {
               throw new Util.FoundOne(r);
             }
           }
@@ -86,11 +88,11 @@ public class DrillPushFilterPastProjectRule extends RelOptRule {
     Filter filterRel = call.rel(0);
     Project projRel = call.rel(1);
 
-    // Don't push Filter past Project if the Filter is referencing an ITEM expression
+    // Don't push Filter past Project if the Filter is referencing an ITEM or a FLATTEN expression
     // from the Project.
     //\TODO: Ideally we should split up the filter conditions into ones that
     // reference the ITEM expression and ones that don't and push the latter past the Project
-    if (findItemOperator(filterRel.getCondition(), projRel.getProjects()) != null) {
+    if (findItemOrFlatten(filterRel.getCondition(), projRel.getProjects()) != null) {
       return;
     }
 

http://git-wip-us.apache.org/repos/asf/drill/blob/a915085e/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
index 5756e97..39e36eb 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
@@ -196,6 +196,17 @@ public class TestFlatten extends BaseTestQuery {
   }
 
   @Test
+  public void drill3370() throws Exception {
+    testBuilder()
+        .sqlQuery("select a from (select flatten(arr) as a from cp.`/flatten/drill-3370.json`) where a > 100")
+        .unOrdered()
+        .baselineColumns("a")
+        .baselineValues(131l)
+        .baselineValues(106l)
+        .go();
+  }
+
+  @Test
   @Ignore("not yet fixed")
   public void drill1660() throws Exception {
     test("select * from cp.`/flatten/empty-rm.json`");

http://git-wip-us.apache.org/repos/asf/drill/blob/a915085e/exec/java-exec/src/test/resources/flatten/drill-3370.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/flatten/drill-3370.json b/exec/java-exec/src/test/resources/flatten/drill-3370.json
new file mode 100644
index 0000000..381a394
--- /dev/null
+++ b/exec/java-exec/src/test/resources/flatten/drill-3370.json
@@ -0,0 +1,5 @@
+{"arr": [131]}
+{"arr": [1]}
+{"arr": [27]}
+{"arr": [79]}
+{"arr": [106]}


[2/3] drill git commit: DRILL-1673: Fix for error with flatten function when used with nested lists.

Posted by js...@apache.org.
DRILL-1673: Fix for error with flatten function when used with nested lists.

Added a small reference implementation of flatten for generating baselines

remove now-unneeded code in EmptyValuePopulator as we are guarenteed to have the first offset initialized to 0.


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

Branch: refs/heads/master
Commit: 233faf2674c9ea2a9e416d01091bbf3658406f69
Parents: e659f01
Author: Jason Altekruse <al...@gmail.com>
Authored: Wed Jun 17 14:12:05 2015 -0700
Committer: Jason Altekruse <al...@gmail.com>
Committed: Sun Jun 28 22:28:27 2015 -0700

----------------------------------------------------------------------
 .../vector/complex/EmptyValuePopulator.java     |   2 +-
 .../exec/vector/complex/RepeatedListVector.java |   5 +-
 .../java/org/apache/drill/DrillTestWrapper.java |   2 +-
 .../exec/physical/impl/flatten/TestFlatten.java | 180 ++++++++++++++++++-
 .../complex_transaction_example_data.json       | 100 +++++++++++
 .../src/test/resources/store/json/1673.json     |   1 +
 6 files changed, 284 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/233faf26/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/EmptyValuePopulator.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/EmptyValuePopulator.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/EmptyValuePopulator.java
index 8c61a60..fa1de66 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/EmptyValuePopulator.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/EmptyValuePopulator.java
@@ -43,7 +43,7 @@ public class EmptyValuePopulator {
     final UInt4Vector.Accessor accessor = offsets.getAccessor();
     final UInt4Vector.Mutator mutator = offsets.getMutator();
     final int lastSet = Math.max(accessor.getValueCount() - 1, 0);
-    final int previousEnd = accessor.get(lastSet);
+    final int previousEnd = accessor.get(lastSet);//0 ? 0 : accessor.get(lastSet);
     for (int i = lastSet; i < lastIndex; i++) {
       mutator.setSafe(i + 1, previousEnd);
     }

http://git-wip-us.apache.org/repos/asf/drill/blob/233faf26/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java
index f538399..85e4d1d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/vector/complex/RepeatedListVector.java
@@ -153,7 +153,10 @@ public class RepeatedListVector extends AbstractContainerVector
 
       @Override
       public void splitAndTransfer(int startIndex, int length) {
-        throw new UnsupportedOperationException("Repeated list does not support split & transfer operation");
+        target.allocateNew();
+        for (int i = 0; i < length; i++) {
+          copyValueSafe(startIndex + i, i);
+        }
       }
 
       @Override

http://git-wip-us.apache.org/repos/asf/drill/blob/233faf26/exec/java-exec/src/test/java/org/apache/drill/DrillTestWrapper.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/DrillTestWrapper.java b/exec/java-exec/src/test/java/org/apache/drill/DrillTestWrapper.java
index d4e7ed6..77d2a54 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/DrillTestWrapper.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/DrillTestWrapper.java
@@ -538,7 +538,7 @@ public class DrillTestWrapper {
         break;
       }
       if (!found) {
-        throw new Exception("Did not find expected record in result set: " + printRecord(expectedRecord));
+        throw new Exception(String.format("After matching %d records, did not find expected record in result set: %s", counter, printRecord(expectedRecord)));
       } else {
         actualRecords.remove(i);
         counter++;

http://git-wip-us.apache.org/repos/asf/drill/blob/233faf26/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
index 6f5a303..5756e97 100644
--- a/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
+++ b/exec/java-exec/src/test/java/org/apache/drill/exec/physical/impl/flatten/TestFlatten.java
@@ -17,13 +17,22 @@
  ******************************************************************************/
 package org.apache.drill.exec.physical.impl.flatten;
 
+import static org.apache.drill.TestBuilder.listOf;
+import static org.apache.drill.TestBuilder.mapOf;
 import static org.junit.Assert.assertEquals;
 
+import com.google.common.collect.Lists;
 import org.apache.drill.BaseTestQuery;
+import org.apache.drill.TestBuilder;
 import org.apache.drill.common.util.FileUtils;
-import org.apache.drill.exec.proto.UserBitShared;
+import org.apache.drill.exec.fn.interp.TestConstantFolding;
+import org.apache.drill.exec.util.JsonStringHashMap;
 import org.junit.Ignore;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.TemporaryFolder;
+
+import java.util.List;
 
 public class TestFlatten extends BaseTestQuery {
 
@@ -36,6 +45,8 @@ public class TestFlatten extends BaseTestQuery {
    */
   public static boolean RUN_ADVANCED_TESTS = false;
 
+  @Rule
+  public TemporaryFolder folder = new TemporaryFolder();
 
   @Test
   public void testFlattenFailure() throws Exception {
@@ -44,6 +55,141 @@ public class TestFlatten extends BaseTestQuery {
   }
 
   @Test
+  public void testFlatten_Drill2162_complex() throws Exception {
+    String path = folder.getRoot().toPath().toString();
+
+    String jsonRecords = BaseTestQuery.getFile("flatten/complex_transaction_example_data.json");
+    int numCopies = 700;
+    new TestConstantFolding.SmallFileCreator(folder)
+        .setRecord(jsonRecords)
+        .createFiles(1, numCopies, "json");
+
+    List<JsonStringHashMap<String,Object>> data = Lists.newArrayList(
+        mapOf("uid", 1l,
+            "lst_lst_0", listOf(1l, 2l, 3l, 4l, 5l),
+            "lst_lst_1", listOf(2l, 3l, 4l, 5l, 6l),
+            "lst_lst", listOf(
+            listOf(1l, 2l, 3l, 4l, 5l),
+            listOf(2l, 3l, 4l, 5l, 6l))
+        ),
+        mapOf("uid", 2l,
+            "lst_lst_0", listOf(1l, 2l, 3l, 4l, 5l),
+            "lst_lst_1", listOf(2l, 3l, 4l, 5l, 6l),
+            "lst_lst", listOf(
+            listOf(1l, 2l, 3l, 4l, 5l),
+            listOf(2l, 3l, 4l, 5l, 6l))
+        )
+    );
+
+    List<JsonStringHashMap<String, Object>> result = flatten(flatten(flatten(data, "lst_lst_1"), "lst_lst_0"), "lst_lst");
+
+    TestBuilder builder = testBuilder()
+        .sqlQuery("select uid, flatten(d.lst_lst[1]) lst1, flatten(d.lst_lst[0]) lst0, flatten(d.lst_lst) lst from " +
+                  "dfs.`" + path + "/bigfile/bigfile.json` d")
+        .unOrdered()
+        .baselineColumns("uid", "lst1", "lst0", "lst");
+    for (int i = 0; i < numCopies; i++) {
+      for (JsonStringHashMap<String, Object> record : result) {
+        builder.baselineValues(record.get("uid"), record.get("lst_lst_1"), record.get("lst_lst_0"), record.get("lst_lst"));
+      }
+    }
+    builder.go();
+  };
+
+  @Test
+  public void testFlattenReferenceImpl() throws Exception {
+    List<JsonStringHashMap<String,Object>> data = Lists.newArrayList(
+        mapOf("a",1,
+              "b",2,
+              "list_col", listOf(10,9),
+              "nested_list_col",listOf(
+                  listOf(100,99),
+                  listOf(1000,999)
+            )));
+    List<JsonStringHashMap<String, Object>> result = flatten(flatten(flatten(data, "list_col"), "nested_list_col"), "nested_list_col");
+     List<JsonStringHashMap<String, Object>> expectedResult = Lists.newArrayList(
+        mapOf("nested_list_col", 100,  "list_col", 10,"a", 1, "b",2),
+        mapOf("nested_list_col", 99,   "list_col", 10,"a", 1, "b",2),
+        mapOf("nested_list_col", 1000, "list_col", 10,"a", 1, "b",2),
+        mapOf("nested_list_col", 999,  "list_col", 10,"a", 1, "b",2),
+        mapOf("nested_list_col", 100,  "list_col", 9, "a", 1, "b",2),
+        mapOf("nested_list_col", 99,   "list_col", 9, "a", 1, "b",2),
+        mapOf("nested_list_col", 1000, "list_col", 9, "a", 1, "b",2),
+        mapOf("nested_list_col", 999,  "list_col", 9, "a", 1, "b",2)
+    );
+    int i = 0;
+    for (JsonStringHashMap record : result) {
+      assertEquals(record, expectedResult.get(i));
+      i++;
+    }
+  }
+
+  private List<JsonStringHashMap<String, Object>> flatten(
+      List<JsonStringHashMap<String,Object>> incomingRecords,
+      String colToFlatten) {
+    return flatten(incomingRecords, colToFlatten, colToFlatten);
+  }
+
+  private List<JsonStringHashMap<String, Object>> flatten(
+      List<JsonStringHashMap<String,Object>> incomingRecords,
+      String colToFlatten,
+      String flattenedDataColName) {
+    List<JsonStringHashMap<String,Object>> output = Lists.newArrayList();
+    for (JsonStringHashMap<String, Object> incomingRecord : incomingRecords) {
+      List dataToFlatten = (List) incomingRecord.get(colToFlatten);
+      for (int i = 0; i < dataToFlatten.size(); i++) {
+        final JsonStringHashMap newRecord = new JsonStringHashMap();
+        newRecord.put(flattenedDataColName, dataToFlatten.get(i));
+        for (String s : incomingRecord.keySet()) {
+          if (s.equals(colToFlatten)) {
+            continue;
+          }
+          newRecord.put(s, incomingRecord.get(s));
+        }
+        output.add(newRecord);
+      }
+    }
+    return output;
+  }
+
+  @Test
+  public void testFlatten_Drill2162_simple() throws Exception {
+    String path = folder.getRoot().toPath().toString();
+
+    List<Long> inputList = Lists.newArrayList();
+    String jsonRecord = "{ \"int_list\" : [";
+    final int listSize = 30;
+    for (int i = 1; i < listSize; i++ ) {
+      jsonRecord += i + ", ";
+      inputList.add((long) i);
+    }
+    jsonRecord += listSize + "] }";
+    inputList.add((long) listSize);
+    int numRecords = 3000;
+    new TestConstantFolding.SmallFileCreator(folder)
+        .setRecord(jsonRecord)
+        .createFiles(1, numRecords, "json");
+
+    List<JsonStringHashMap<String,Object>> data = Lists.newArrayList(
+        mapOf("int_list", inputList)
+    );
+
+    List<JsonStringHashMap<String, Object>> result = flatten(data, "int_list");
+
+    TestBuilder builder = testBuilder()
+        .sqlQuery("select flatten(int_list) as int_list from dfs.`" + path + "/bigfile/bigfile.json`")
+        .unOrdered()
+        .baselineColumns("int_list");
+
+    for (int i = 0; i < numRecords; i++) {
+      for (JsonStringHashMap<String, Object> record : result) {
+        builder.baselineValues(record.get("int_list"));
+      }
+    }
+    builder.go();
+  };
+
+  @Test
   public void drill1671() throws Exception{
     int rowCount = testSql("select * from (select count(*) as cnt from (select id, flatten(evnts1), flatten(evnts2), flatten(evnts3), flatten(evnts4), flatten(evnts5), flatten(evnts6), flatten(evnts7), flatten(evnts8), flatten(evnts9), flatten(evnts10), flatten(evnts11) from cp.`/flatten/many-arrays-50.json`)x )y where cnt = 2048");
     assertEquals(rowCount, 1);
@@ -55,6 +201,36 @@ public class TestFlatten extends BaseTestQuery {
     test("select * from cp.`/flatten/empty-rm.json`");
   }
 
+  @Test // repeated list within a repeated map
+  public void drill1673() throws Exception {
+    String path = folder.getRoot().toPath().toString();
+
+    String jsonRecords = BaseTestQuery.getFile("store/json/1673.json");
+    int numCopies = 25000;
+    new TestConstantFolding.SmallFileCreator(folder)
+        .setRecord(jsonRecords)
+        .createFiles(1, numCopies, "json");
+
+    TestBuilder builder = testBuilder()
+        .sqlQuery("select t.fixed_column as fixed_column, " +
+                  "flatten(t.list_column) as list_col " +
+                  "from dfs.`" + path + "/bigfile/bigfile.json` as t")
+        .baselineColumns("fixed_column", "list_col")
+        .unOrdered();
+    Object map1 = mapOf("id1", "1",
+                        "name", "zhu",
+                        "num", listOf(listOf(1l, 2l, 3l)));
+    Object map2 = mapOf("id1", "2",
+                      "name", "hao",
+                      "num", listOf(listOf(4l, 5l, 6l)));
+    for (int i = 0; i < numCopies; i++) {
+      builder.baselineValues("abc", map1);
+      builder.baselineValues("abc", map2);
+    }
+
+    builder.go();
+  }
+
   @Test
   public void drill1653() throws Exception{
     int rowCount = testSql("select * from (select sum(t.flat.`value`) as sm from (select id, flatten(kvgen(m)) as flat from cp.`/flatten/missing-map.json`)t) where sm = 10 ");
@@ -88,8 +264,6 @@ public class TestFlatten extends BaseTestQuery {
         "on transaction_info.max_event_time = event_info.event.event_time;");
   }
 
-
-
   @Test
   public void testKVGenFlatten1() throws Exception {
     // works - TODO and verify results

http://git-wip-us.apache.org/repos/asf/drill/blob/233faf26/exec/java-exec/src/test/resources/flatten/complex_transaction_example_data.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/flatten/complex_transaction_example_data.json b/exec/java-exec/src/test/resources/flatten/complex_transaction_example_data.json
new file mode 100644
index 0000000..039ce18
--- /dev/null
+++ b/exec/java-exec/src/test/resources/flatten/complex_transaction_example_data.json
@@ -0,0 +1,100 @@
+{
+  "uid" : 1,
+  "uid_str" : "01",
+  "type" : "web",
+  "max_trans_amount" : 1000,
+  "events" : [
+        { "evnt_id":"e1", "campaign_id":"c1", "event_name":"e1_name", "event_time":1000000, "type" : "cmpgn1"},
+        { "evnt_id":"e2", "campaign_id":"c1", "event_name":"e2_name", "event_time":2000000, "type" : "cmpgn4"},
+        { "evnt_id":"e3", "campaign_id":"c1", "event_name":"e3_name", "event_time":3000000, "type" : "cmpgn1"},
+        { "evnt_id":"e4", "campaign_id":"c1", "event_name":"e4_name", "event_time":4000000, "type" : "cmpgn1"},
+        { "evnt_id":"e5", "campaign_id":"c2", "event_name":"e5_name", "event_time":5000000, "type" : "cmpgn3"},
+        { "evnt_id":"e6", "campaign_id":"c1", "event_name":"e6_name", "event_time":6000000, "type" : "cmpgn9"},
+        { "evnt_id":"e7", "campaign_id":"c1", "event_name":"e7_name", "event_time":7000000, "type" : "cmpgn3"},
+        { "evnt_id":"e8", "campaign_id":"c2", "event_name":"e8_name", "event_time":8000000, "type" : "cmpgn2"},
+        { "evnt_id":"e9", "campaign_id":"c2", "event_name":"e9_name", "event_time":9000000, "type" : "cmpgn4"}
+  ],
+  "transactions" : [
+       { "trans_id":"t1", "amount":100, "trans_time":7777777, "type":"sports"},
+       { "trans_id":"t2", "amount":1000, "trans_time":8888888, "type":"groceries"}
+  ],
+  "map":{"rm": [
+    {"mapid":"m1","mapvalue":{"col1":1,"col2":[0,1,2,3,4,5]},"rptd": [{ "a": "foo"},{"b":"boo"}]},
+    {"mapid":"m2","mapvalue":{"col1":0,"col2":[]},"rptd": [{ "a": "bar"},{"c":1},{"d":4.5}]}
+  ]},
+  "sub": [{"z1":"hello"},{"z2":1}],
+  "features": [
+        {
+            "type": "Feature",
+            "properties": {
+                "mag": 6.9,
+                "time": 1405954481000,
+                "updated": 1405983436259
+            },
+            "geometry": {
+                "type": "Point",
+                "coordinates": "100,90"
+            },
+            "id": "usb000ruzk",
+            "location": {
+                "zip": "95134",
+                "street": "zanker",
+                "bldgs": {
+                    "bldg1" : "HQ1",
+                    "bldg2" : "HQ2"
+                }
+            }
+        }
+    ],
+  "lst_lst" : [[1,2,3,4,5],[2,3,4,5,6]]
+}
+{
+  "uid" : 2,
+  "uid_str" : "02",
+  "type" : "store",
+  "max_trans_amount" : 2001,
+  "events" : [
+        { "evnt_id":"e1", "campaign_id":"c1", "event_name":"e1_name", "event_time":1000000, "type" : "cmpgn9"},
+        { "evnt_id":"e2", "campaign_id":"c1", "event_name":"e2_name", "event_time":2000000, "type" : "cmpgn4"},
+        { "evnt_id":"e3", "campaign_id":"c1", "event_name":"e3_name", "event_time":3000000, "type" : "cmpgn1"},
+        { "evnt_id":"e4", "campaign_id":"c1", "event_name":"e4_name", "event_time":4000000, "type" : "cmpgn1"},
+        { "evnt_id":"e5", "campaign_id":"c2", "event_name":"e5_name", "event_time":5000000, "type" : "cmpgn2"},
+        { "evnt_id":"e6", "campaign_id":"c1", "event_name":"e6_name", "event_time":6000000, "type" : "cmpgn9"},
+        { "evnt_id":"e7", "campaign_id":"c1", "event_name":"e7_name", "event_time":7000000, "type" : "cmpgn3"},
+        { "evnt_id":"e8", "campaign_id":"c2", "event_name":"e8_name", "event_time":8000000, "type" : "cmpgn2"},
+        { "evnt_id":"e9", "campaign_id":"c2", "event_name":"e9_name", "event_time":9000000, "type" : "cmpgn4"}
+  ],
+  "transactions" : [
+       { "trans_id":"t1", "amount":100, "trans_time":7777777, "type":"sports"},
+       { "trans_id":"t2", "amount":1000, "trans_time":8888888, "type":"groceries"}
+  ],
+  "map":{"rm": [
+    {"mapid":"m0","mapvalue":{"col1":1,"col2":[0,1,2,3,4,5]},"rptd": [{ "a": "foo1"},{"b":"boo"}]},
+    {"mapid":"m1","mapvalue":{"col1":0,"col2":[]},"rptd": [{ "a": "bar"},{"c":-1},{"d":4.5}]}
+  ]},
+  "sub": [{"z1":"hello"},{"z2":10}],
+  "features": [
+        {
+            "type": "cmpgn9",
+            "properties": {
+                "mag": 6.9,
+                "time": 1405954481000,
+                "updated": 1405983436259
+            },
+            "geometry": {
+                "type": "Point",
+                "coordinates": "100,90"
+            },
+            "id": "usb000ruzk",
+            "location": {
+                "zip": "95134",
+                "street": "zanker",
+                "bldgs": {
+                    "bldg1" : "HQ1",
+                    "bldg2" : "HQ2"
+                }
+            }
+        }
+    ],
+  "lst_lst" : [[1,2,3,4,5],[2,3,4,5,6]]
+}

http://git-wip-us.apache.org/repos/asf/drill/blob/233faf26/exec/java-exec/src/test/resources/store/json/1673.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/store/json/1673.json b/exec/java-exec/src/test/resources/store/json/1673.json
new file mode 100644
index 0000000..b887d40
--- /dev/null
+++ b/exec/java-exec/src/test/resources/store/json/1673.json
@@ -0,0 +1 @@
+{"fixed_column":"abc", "list_column":[{"id1":"1","name":"zhu", "num": [[1,2,3]]}, {"id1":"2","name":"hao", "num": [[4,5,6]]} ]}
\ No newline at end of file