You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by sm...@apache.org on 2014/09/30 09:26:16 UTC
[14/21] git commit: DRILL-1465: Enhance push partition filter rule to
handle Filters appearing above a Project. Modify group scans' digests to
include number of files being considered.
DRILL-1465: Enhance push partition filter rule to handle Filters appearing above a Project. Modify group scans' digests to include number of files being considered.
Resource files for testing partition filter pushdown.
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/1959ec66
Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/1959ec66
Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/1959ec66
Branch: refs/heads/master
Commit: 1959ec667658b7d3cbcea57cc66341b531e00658
Parents: f1fd9a9
Author: Aman Sinha <as...@maprtech.com>
Authored: Sun Sep 28 17:37:42 2014 -0700
Committer: Steven Phillips <sp...@maprtech.com>
Committed: Mon Sep 29 18:21:45 2014 -0700
----------------------------------------------------------------------
.../exec/planner/logical/DirPathBuilder.java | 9 +-
.../DrillPushPartitionFilterIntoScan.java | 96 ++++++++++++----
.../exec/planner/logical/DrillRuleSets.java | 4 +-
.../exec/store/dfs/easy/EasyGroupScan.java | 15 ++-
.../exec/store/parquet/ParquetGroupScan.java | 1 +
.../org/apache/drill/TestPartitionFilter.java | 113 +++++++++++++++++++
.../multilevel/csv/1994/Q1/orders_94_q1.csv | 10 ++
.../multilevel/csv/1994/Q2/orders_94_q2.csv | 10 ++
.../multilevel/csv/1994/Q3/orders_94_q3.csv | 10 ++
.../multilevel/csv/1994/Q4/orders_94_q4.csv | 10 ++
.../multilevel/csv/1995/Q1/orders_95_q1.csv | 10 ++
.../multilevel/csv/1995/Q2/orders_95_q2.csv | 10 ++
.../multilevel/csv/1995/Q3/orders_95_q3.csv | 10 ++
.../multilevel/csv/1995/Q4/orders_95_q4.csv | 10 ++
.../multilevel/json/1994/Q1/orders_94_q1.json | 101 +++++++++++++++++
.../multilevel/json/1994/Q2/orders_94_q2.json | 101 +++++++++++++++++
.../multilevel/json/1994/Q3/orders_94_q3.json | 101 +++++++++++++++++
.../multilevel/json/1994/Q4/orders_94_q4.json | 101 +++++++++++++++++
.../multilevel/json/1995/Q1/orders_95_q1.json | 101 +++++++++++++++++
.../multilevel/json/1995/Q2/orders_95_q2.json | 101 +++++++++++++++++
.../multilevel/json/1995/Q3/orders_95_q3.json | 101 +++++++++++++++++
.../multilevel/json/1995/Q4/orders_95_q4.json | 101 +++++++++++++++++
.../parquet/1994/Q1/orders_94_q1.parquet | Bin 0 -> 2015 bytes
.../parquet/1994/Q2/orders_94_q2.parquet | Bin 0 -> 2130 bytes
.../parquet/1994/Q3/orders_94_q3.parquet | Bin 0 -> 2054 bytes
.../parquet/1994/Q4/orders_94_q4.parquet | Bin 0 -> 2056 bytes
.../parquet/1995/Q1/orders_95_q1.parquet | Bin 0 -> 2180 bytes
.../parquet/1995/Q2/orders_95_q2.parquet | Bin 0 -> 2110 bytes
.../parquet/1995/Q3/orders_95_q3.parquet | Bin 0 -> 1902 bytes
.../parquet/1995/Q4/orders_95_q4.parquet | Bin 0 -> 2013 bytes
30 files changed, 1094 insertions(+), 32 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPathBuilder.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPathBuilder.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPathBuilder.java
index f911d7c..743b7dc 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPathBuilder.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DirPathBuilder.java
@@ -21,7 +21,6 @@ import java.util.List;
import org.apache.drill.common.expression.FieldReference;
import org.apache.drill.common.expression.SchemaPath;
-import org.apache.drill.exec.planner.common.DrillScanRelBase;
import org.eigenbase.relopt.RelOptUtil;
import org.eigenbase.reltype.RelDataTypeField;
import org.eigenbase.rex.RexBuilder;
@@ -49,7 +48,7 @@ public class DirPathBuilder extends RexVisitorImpl <SchemaPath> {
static final String EMPTY_STRING = "";
final private DrillFilterRel filterRel;
- final private DrillScanRelBase scanRel;
+ final private DrillRel inputRel;
final private RexBuilder builder;
final private String dirLabel;
@@ -60,10 +59,10 @@ public class DirPathBuilder extends RexVisitorImpl <SchemaPath> {
private RexNode finalCondition = null; // placeholder for the final filter condition
private boolean dirMatch = false;
- DirPathBuilder(DrillFilterRel filterRel, DrillScanRelBase scanRel, RexBuilder builder, String dirLabel) {
+ DirPathBuilder(DrillFilterRel filterRel, DrillRel inputRel, RexBuilder builder, String dirLabel) {
super(true);
this.filterRel = filterRel;
- this.scanRel = scanRel;
+ this.inputRel = inputRel;
this.builder = builder;
this.dirLabel = dirLabel;
this.finalCondition = filterRel.getCondition();
@@ -153,7 +152,7 @@ public class DirPathBuilder extends RexVisitorImpl <SchemaPath> {
@Override
public SchemaPath visitInputRef(RexInputRef inputRef) {
final int index = inputRef.getIndex();
- final RelDataTypeField field = scanRel.getRowType().getFieldList().get(index);
+ final RelDataTypeField field = inputRel.getRowType().getFieldList().get(index);
return FieldReference.getWithQuotedRef(field.getName());
}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushPartitionFilterIntoScan.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushPartitionFilterIntoScan.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushPartitionFilterIntoScan.java
index 940b6c2..3fbc3af 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushPartitionFilterIntoScan.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillPushPartitionFilterIntoScan.java
@@ -29,15 +29,56 @@ import org.apache.drill.exec.store.dfs.FileSelection;
import org.apache.drill.exec.store.dfs.FormatSelection;
import org.eigenbase.relopt.RelOptRule;
import org.eigenbase.relopt.RelOptRuleCall;
+import org.eigenbase.relopt.RelOptRuleOperand;
import org.eigenbase.rex.RexNode;
import com.google.common.collect.Lists;
-public class DrillPushPartitionFilterIntoScan extends RelOptRule {
- public static final RelOptRule INSTANCE = new DrillPushPartitionFilterIntoScan();
+public abstract class DrillPushPartitionFilterIntoScan extends RelOptRule {
- private DrillPushPartitionFilterIntoScan() {
- super(RelOptHelper.some(DrillFilterRel.class, RelOptHelper.any(DrillScanRel.class)), "DrillPushPartitionFilterIntoScan");
+ public static final RelOptRule FILTER_ON_PROJECT =
+ new DrillPushPartitionFilterIntoScan(
+ RelOptHelper.some(DrillFilterRel.class, RelOptHelper.some(DrillProjectRel.class, RelOptHelper.any(DrillScanRel.class))),
+ "DrillPushPartitionFilterIntoScan:Filter_On_Project") {
+
+ @Override
+ public boolean matches(RelOptRuleCall call) {
+ final DrillScanRel scan = (DrillScanRel) call.rel(2);
+ return scan.getGroupScan().supportsPartitionFilterPushdown();
+ }
+
+ @Override
+ public void onMatch(RelOptRuleCall call) {
+ final DrillFilterRel filterRel = (DrillFilterRel) call.rel(0);
+ final DrillProjectRel projectRel = (DrillProjectRel) call.rel(1);
+ final DrillScanRel scanRel = (DrillScanRel) call.rel(2);
+ doOnMatch(call, filterRel, projectRel, scanRel);
+ }
+ };
+
+ public static final RelOptRule FILTER_ON_SCAN =
+ new DrillPushPartitionFilterIntoScan(
+ RelOptHelper.some(DrillFilterRel.class, RelOptHelper.any(DrillScanRel.class)),
+ "DrillPushPartitionFilterIntoScan:Filter_On_Scan") {
+
+ @Override
+ public boolean matches(RelOptRuleCall call) {
+ final DrillScanRel scan = (DrillScanRel) call.rel(1);
+ return scan.getGroupScan().supportsPartitionFilterPushdown();
+ }
+
+ @Override
+ public void onMatch(RelOptRuleCall call) {
+ final DrillFilterRel filterRel = (DrillFilterRel) call.rel(0);
+ final DrillScanRel scanRel = (DrillScanRel) call.rel(1);
+ doOnMatch(call, filterRel, null, scanRel);
+ }
+ };
+
+ private DrillPushPartitionFilterIntoScan(
+ RelOptRuleOperand operand,
+ String id) {
+ super(operand, id);
}
private FormatSelection splitFilter(FormatSelection origSelection, DirPathBuilder builder) {
@@ -78,19 +119,11 @@ public class DrillPushPartitionFilterIntoScan extends RelOptRule {
return origSelection;
}
- @Override
- public boolean matches(RelOptRuleCall call) {
- final DrillScanRel scan = (DrillScanRel) call.rel(1);
- return scan.getGroupScan().supportsPartitionFilterPushdown();
- }
-
- @Override
- public void onMatch(RelOptRuleCall call) {
- final DrillFilterRel filterRel = (DrillFilterRel) call.rel(0);
- final DrillScanRel scanRel = (DrillScanRel) call.rel(1);
+ protected void doOnMatch(RelOptRuleCall call, DrillFilterRel filterRel, DrillProjectRel projectRel, DrillScanRel scanRel) {
+ DrillRel inputRel = projectRel != null ? projectRel : scanRel;
PlannerSettings settings = PrelUtil.getPlannerSettings(call.getPlanner());
- DirPathBuilder builder = new DirPathBuilder(filterRel, scanRel, filterRel.getCluster().getRexBuilder(), settings.getFsPartitionColumnLabel());
+ DirPathBuilder builder = new DirPathBuilder(filterRel, inputRel, filterRel.getCluster().getRexBuilder(), settings.getFsPartitionColumnLabel());
FormatSelection origSelection = (FormatSelection)scanRel.getDrillTable().getSelection();
FormatSelection newSelection = splitFilter(origSelection, builder);
@@ -99,26 +132,32 @@ public class DrillPushPartitionFilterIntoScan extends RelOptRule {
return; // no directory filter was pushed down
}
+ RexNode origFilterCondition = filterRel.getCondition();
RexNode newFilterCondition = builder.getFinalCondition();
try {
FileGroupScan fgscan = ((FileGroupScan)scanRel.getGroupScan()).clone(newSelection.getSelection());
if (newFilterCondition.isAlwaysTrue()) {
- // TODO: temporarily keep the original filter until we resolve bugs
- newFilterCondition = filterRel.getCondition();
- }
- /*
+
final DrillScanRel newScanRel =
new DrillScanRel(scanRel.getCluster(),
scanRel.getTraitSet().plus(DrillRel.DRILL_LOGICAL),
scanRel.getTable(),
fgscan,
- filterRel.getRowType(),
+ scanRel.getRowType(),
scanRel.getColumns());
- call.transformTo(newScanRel);
+
+ if (projectRel != null) {
+ DrillProjectRel newProjectRel = new DrillProjectRel(projectRel.getCluster(), projectRel.getTraitSet(),
+ newScanRel, projectRel.getProjects(), filterRel.getRowType());
+
+ call.transformTo(newProjectRel);
+ } else {
+ call.transformTo(newScanRel);
+ }
} else {
- */
+
final DrillScanRel newScanRel =
new DrillScanRel(scanRel.getCluster(),
scanRel.getTraitSet().plus(DrillRel.DRILL_LOGICAL),
@@ -126,9 +165,18 @@ public class DrillPushPartitionFilterIntoScan extends RelOptRule {
fgscan,
scanRel.getRowType(),
scanRel.getColumns());
- final DrillFilterRel newFilterRel = new DrillFilterRel(filterRel.getCluster(), filterRel.getTraitSet(), newScanRel, newFilterCondition);
+ if (projectRel != null) {
+ DrillProjectRel newProjectRel = new DrillProjectRel(projectRel.getCluster(), projectRel.getTraitSet(),
+ newScanRel, projectRel.getProjects(), projectRel.getRowType());
+ inputRel = newProjectRel;
+ } else {
+ inputRel = newScanRel;
+ }
+ final DrillFilterRel newFilterRel = new DrillFilterRel(filterRel.getCluster(), filterRel.getTraitSet(),
+ inputRel, origFilterCondition /* for now keep the original condition until we add more test coverage */);
+
call.transformTo(newFilterRel);
- // }
+ }
} catch (IOException e) {
throw new DrillRuntimeException(e) ;
}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
index ff1d5e4..7af541a 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/logical/DrillRuleSets.java
@@ -39,7 +39,6 @@ import org.apache.drill.exec.planner.physical.SortConvertPrule;
import org.apache.drill.exec.planner.physical.SortPrule;
import org.apache.drill.exec.planner.physical.StreamAggPrule;
import org.apache.drill.exec.planner.physical.StreamingWindowPrule;
-import org.apache.drill.exec.planner.physical.StreamingWindowPrule;
import org.apache.drill.exec.planner.physical.UnionAllPrule;
import org.apache.drill.exec.planner.physical.WriterPrule;
import org.eigenbase.rel.RelFactories;
@@ -97,7 +96,8 @@ public class DrillRuleSets {
// PushSortPastProjectRule.INSTANCE, //
DrillPushProjIntoScan.INSTANCE,
- DrillPushPartitionFilterIntoScan.INSTANCE,
+ DrillPushPartitionFilterIntoScan.FILTER_ON_PROJECT,
+ DrillPushPartitionFilterIntoScan.FILTER_ON_SCAN,
////////////////////////////////
DrillScanRule.INSTANCE,
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/easy/EasyGroupScan.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/easy/EasyGroupScan.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/easy/EasyGroupScan.java
index 35d1868..e22e07e 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/easy/EasyGroupScan.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/dfs/easy/EasyGroupScan.java
@@ -180,8 +180,19 @@ public class EasyGroupScan extends AbstractFileGroupScan{
mappings = AssignmentCreator.getMappings(incomingEndpoints, chunks);
}
+ private void createMappings(List<EndpointAffinity> affinities) {
+ List<DrillbitEndpoint> endpoints = Lists.newArrayList();
+ for (EndpointAffinity e : affinities) {
+ endpoints.add(e.getEndpoint());
+ }
+ this.applyAssignments(endpoints);
+ }
+
@Override
public EasySubScan getSpecificScan(int minorFragmentId) {
+ if (mappings == null) {
+ createMappings(this.endpointAffinities);
+ }
assert minorFragmentId < mappings.size() : String.format(
"Mappings length [%d] should be longer than minor fragment id [%d] but it isn't.", mappings.size(),
minorFragmentId);
@@ -214,7 +225,7 @@ public class EasyGroupScan extends AbstractFileGroupScan{
@Override
public String toString() {
- return "EasyGroupScan [selectionRoot=" + selectionRoot + ", columns = " + columns + "]";
+ return "EasyGroupScan [selectionRoot=" + selectionRoot + ", numFiles=" + getFiles().size() + ", columns = " + columns + "]";
}
@Override
@@ -236,6 +247,8 @@ public class EasyGroupScan extends AbstractFileGroupScan{
public FileGroupScan clone(FileSelection selection) throws IOException {
EasyGroupScan newScan = new EasyGroupScan(this);
newScan.initFromSelection(selection, formatPlugin);
+ newScan.mappings = null; /* the mapping will be created later when we get specific scan
+ since the end-point affinities are not known at this time */
return newScan;
}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetGroupScan.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetGroupScan.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetGroupScan.java
index 6d3cf5a..dab20e3 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetGroupScan.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/parquet/ParquetGroupScan.java
@@ -387,6 +387,7 @@ public class ParquetGroupScan extends AbstractFileGroupScan {
public String toString() {
return "ParquetGroupScan [entries=" + entries
+ ", selectionRoot=" + selectionRoot
+ + ", numFiles=" + getEntries().size()
+ ", columns=" + columns + "]";
}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java b/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java
new file mode 100644
index 0000000..a47dc82
--- /dev/null
+++ b/exec/java-exec/src/test/java/org/apache/drill/TestPartitionFilter.java
@@ -0,0 +1,113 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.drill;
+
+import org.apache.drill.common.util.TestTools;
+import org.junit.Test;
+
+public class TestPartitionFilter extends BaseTestQuery{
+ static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(TestPartitionFilter.class);
+
+ static final String WORKING_PATH = TestTools.getWorkingPath();
+ static final String TEST_RES_PATH = WORKING_PATH + "/src/test/resources";
+
+ @Test //Parquet: basic test with dir0 and dir1 filters in different orders
+ public void testPartitionFilter1_Parquet() throws Exception {
+ String query1 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/parquet` where dir0=1994 and dir1='Q1'", TEST_RES_PATH);
+ String query2 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/parquet` where dir1='Q1' and dir0=1994", TEST_RES_PATH);
+ test(query1);
+ test(query2);
+ }
+
+ @Test //Json: basic test with dir0 and dir1 filters in different orders
+ public void testPartitionFilter1_Json() throws Exception {
+ String query1 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/json` where dir0=1994 and dir1='Q1'", TEST_RES_PATH);
+ String query2 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/json` where dir1='Q1' and dir0=1994", TEST_RES_PATH);
+ test(query1);
+ test(query2);
+ }
+
+ @Test //CSV: basic test with dir0 and dir1 filters in different orders
+ public void testPartitionFilter1_Csv() throws Exception {
+ String query1 = String.format("select * from dfs_test.`%s/multilevel/csv` where dir0=1994 and dir1='Q1'", TEST_RES_PATH);
+ String query2 = String.format("select * from dfs_test.`%s/multilevel/csv` where dir1='Q1' and dir0=1994", TEST_RES_PATH);
+ test(query1);
+ test(query2);
+ }
+
+ @Test //Parquet: partition filters are combined with regular columns in an AND
+ public void testPartitionFilter2_Parquet() throws Exception {
+ String query1 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/parquet` where o_custkey < 1000 and dir0=1994 and dir1='Q1'", TEST_RES_PATH);
+ String query2 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/parquet` where dir1='Q1' and o_custkey < 1000 and dir0=1994", TEST_RES_PATH);
+ test(query1);
+ test(query2);
+ }
+
+ @Test //Json: partition filters are combined with regular columns in an AND
+ public void testPartitionFilter2_Json() throws Exception {
+ String query1 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/json` where o_custkey < 1000 and dir0=1994 and dir1='Q1'", TEST_RES_PATH);
+ String query2 = String.format("select dir0, dir1, o_custkey, o_orderdate from dfs_test.`%s/multilevel/json` where dir1='Q1' and o_custkey < 1000 and dir0=1994", TEST_RES_PATH);
+ test(query1);
+ test(query2);
+ }
+
+ @Test //CSV: partition filters are combined with regular columns in an AND
+ public void testPartitionFilter2_Csv() throws Exception {
+ String query1 = String.format("select * from dfs_test.`%s/multilevel/csv` where columns[1] < 1000 and dir0=1994 and dir1='Q1'", TEST_RES_PATH);
+ String query2 = String.format("select * from dfs_test.`%s/multilevel/csv` where dir1='Q1' and columns[1] < 1000 and dir0=1994", TEST_RES_PATH);
+ test(query1);
+ test(query2);
+ }
+
+ @Test //Parquet: partition filters are ANDed and belong to a top-level OR
+ public void testPartitionFilter3_Parquet() throws Exception {
+ String query1 = String.format("select * from dfs_test.`%s/multilevel/parquet` where (dir0=1994 and dir1='Q1' and o_custkey < 500) or (dir0=1995 and dir1='Q2' and o_custkey > 500)", TEST_RES_PATH);
+ test(query1);
+ }
+
+ @Test //Json: partition filters are ANDed and belong to a top-level OR
+ public void testPartitionFilter3_Json() throws Exception {
+ String query1 = String.format("select * from dfs_test.`%s/multilevel/json` where (dir0=1994 and dir1='Q1' and o_custkey < 500) or (dir0=1995 and dir1='Q2' and o_custkey > 500)", TEST_RES_PATH);
+ test(query1);
+ }
+
+ @Test //CSV: partition filters are ANDed and belong to a top-level OR
+ public void testPartitionFilter3_Csv() throws Exception {
+ String query1 = String.format("select * from dfs_test.`%s/multilevel/csv` where (dir0=1994 and dir1='Q1' and columns[1] < 500) or (dir0=1995 and dir1='Q2' and columns[1] > 500)", TEST_RES_PATH);
+ test(query1);
+ }
+
+ @Test //Parquet: filters contain join conditions and partition filters
+ public void testPartitionFilter4_Parquet() throws Exception {
+ String query1 = String.format("select t1.dir0, t1.dir1, t1.o_custkey, t1.o_orderdate, cast(t2.c_name as varchar(10)) from dfs_test.`%s/multilevel/parquet` t1, cp.`tpch/customer.parquet` t2 where t1.o_custkey = t2.c_custkey and t1.dir0=1994 and t1.dir1='Q1'", TEST_RES_PATH);
+ test(query1);
+ }
+
+ @Test //Json: filters contain join conditions and partition filters
+ public void testPartitionFilter4_Json() throws Exception {
+ String query1 = String.format("select t1.dir0, t1.dir1, t1.o_custkey, t1.o_orderdate, cast(t2.c_name as varchar(10)) from dfs_test.`%s/multilevel/json` t1, cp.`tpch/customer.parquet` t2 where cast(t1.o_custkey as bigint) = cast(t2.c_custkey as bigint) and t1.dir0=1994 and t1.dir1='Q1'", TEST_RES_PATH);
+ test(query1);
+ }
+
+ @Test //CSV: filters contain join conditions and partition filters
+ public void testPartitionFilter4_Csv() throws Exception {
+ String query1 = String.format("select t1.dir0, t1.dir1, t1.columns[1] as o_custkey, t1.columns[4] as o_orderdate, cast(t2.c_name as varchar(10)) from dfs_test.`%s/multilevel/csv` t1, cp.`tpch/customer.parquet` t2 where cast(t1.columns[1] as bigint) = cast(t2.c_custkey as bigint) and t1.dir0=1994 and t1.dir1='Q1'", TEST_RES_PATH);
+ test(query1);
+ }
+
+}
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1994/Q1/orders_94_q1.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1994/Q1/orders_94_q1.csv b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q1/orders_94_q1.csv
new file mode 100644
index 0000000..6dd7682
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q1/orders_94_q1.csv
@@ -0,0 +1,10 @@
+66,1292,F,104190.66,1994-01-20T00:00:00.000-08:00,5-LOW,Clerk#000000743,0,y pending requests integrate
+99,890,F,108594.87,1994-03-13T00:00:00.000-08:00,4-NOT SPECIFIED,Clerk#000000973,0,e carefully ironic packages. pending
+290,1180,F,67636.54,1994-01-01T00:00:00.000-08:00,4-NOT SPECIFIED,Clerk#000000735,0,efully dogged deposits. furiou
+291,1411,F,88375.89,1994-03-13T00:00:00.000-08:00,1-URGENT,Clerk#000000923,0,dolites. carefully regular pinto beans cajol
+323,392,F,121127.17,1994-03-26T00:00:00.000-08:00,1-URGENT,Clerk#000000959,0,arefully pending foxes sleep blithely. slyly express accoun
+352,1066,F,25542.02,1994-03-08T00:00:00.000-08:00,2-HIGH,Clerk#000000932,0,ke slyly bold pinto beans. blithely regular accounts against the spe
+389,1270,F,3266.69,1994-02-17T00:00:00.000-08:00,2-HIGH,Clerk#000000062,0,ing to the regular asymptotes. final, pending foxes about the blithely sil
+417,547,F,132531.73,1994-02-06T00:00:00.000-08:00,3-MEDIUM,Clerk#000000468,0,ironic, even packages. thinly unusual accounts sleep along the slyly unusual
+673,793,F,34950.94,1994-03-10T00:00:00.000-08:00,1-URGENT,Clerk#000000448,0, special pinto beans use quickly furiously even depende
+833,553,F,53948.73,1994-02-13T00:00:00.000-08:00,3-MEDIUM,Clerk#000000437,0,ts haggle quickly across the slyl
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1994/Q2/orders_94_q2.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1994/Q2/orders_94_q2.csv b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q2/orders_94_q2.csv
new file mode 100644
index 0000000..3d42821
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q2/orders_94_q2.csv
@@ -0,0 +1,10 @@
+69,845,F,204110.73,1994-06-04T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000330,0, depths atop the slyly thin deposits detect among the furiously silent accou
+96,1078,F,64364.3,1994-04-17T00:00:00.000-07:00,2-HIGH,Clerk#000000395,0,oost furiously. pinto
+131,928,F,140726.47,1994-06-08T00:00:00.000-07:00,3-MEDIUM,Clerk#000000625,0,after the fluffily special foxes integrate s
+224,25,F,234050.44,1994-06-18T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000642,0,r the quickly thin courts. carefully
+263,1162,F,104961.32,1994-05-17T00:00:00.000-07:00,2-HIGH,Clerk#000000088,0, pending instructions. blithely un
+355,701,F,103949.82,1994-06-14T00:00:00.000-07:00,5-LOW,Clerk#000000532,0,s. sometimes regular requests cajole. regular, pending accounts a
+356,1469,F,189160.02,1994-06-30T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000944,0,as wake along the bold accounts. even,
+609,1252,F,33980.88,1994-06-01T00:00:00.000-07:00,3-MEDIUM,Clerk#000000348,0,- ironic gifts believe furiously ca
+672,1081,F,128581.82,1994-04-14T00:00:00.000-07:00,5-LOW,Clerk#000000106,0,egular requests are furiously according to
+834,428,F,57631.12,1994-05-23T00:00:00.000-07:00,3-MEDIUM,Clerk#000000805,0, sleep. quickly even foxes are boldly. slyly express requests use slyly
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1994/Q3/orders_94_q3.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1994/Q3/orders_94_q3.csv b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q3/orders_94_q3.csv
new file mode 100644
index 0000000..65b13a8
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q3/orders_94_q3.csv
@@ -0,0 +1,10 @@
+5,445,F,105367.67,1994-07-30T00:00:00.000-07:00,5-LOW,Clerk#000000925,0,quickly. bold deposits sleep slyly. packages use slyly
+64,322,F,35831.73,1994-07-16T00:00:00.000-07:00,3-MEDIUM,Clerk#000000661,0,wake fluffily. sometimes ironic pinto beans about the dolphin
+98,1045,F,71721.4,1994-09-25T00:00:00.000-07:00,1-URGENT,Clerk#000000448,0,c asymptotes. quickly regular packages should have to nag re
+161,167,F,17668.6,1994-08-31T00:00:00.000-07:00,2-HIGH,Clerk#000000322,0,carefully! special instructions sin
+231,910,F,234383.86,1994-09-29T00:00:00.000-07:00,2-HIGH,Clerk#000000446,0, packages haggle slyly after the carefully ironic instruct
+295,190,F,148569.49,1994-09-29T00:00:00.000-07:00,2-HIGH,Clerk#000000155,0, unusual pinto beans play. regular ideas haggle
+548,1240,F,139094.89,1994-09-21T00:00:00.000-07:00,1-URGENT,Clerk#000000435,0,arefully express instru
+902,86,F,49777.81,1994-07-27T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000811,0,yly final requests over the furiously regula
+960,347,F,84356.33,1994-09-21T00:00:00.000-07:00,3-MEDIUM,Clerk#000000120,0,regular accounts. requests
+1031,37,F,203268.37,1994-09-01T00:00:00.000-07:00,3-MEDIUM,Clerk#000000448,0,s; ironic theodolites along the carefully ex
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1994/Q4/orders_94_q4.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1994/Q4/orders_94_q4.csv b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q4/orders_94_q4.csv
new file mode 100644
index 0000000..88d5fff
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1994/Q4/orders_94_q4.csv
@@ -0,0 +1,10 @@
+359,776,F,214770.97,1994-12-19T00:00:00.000-08:00,3-MEDIUM,Clerk#000000934,0,n dolphins. special courts above the carefully ironic requests use
+391,1103,F,14517.91,1994-11-17T00:00:00.000-08:00,2-HIGH,Clerk#000000256,0,orges thrash fluffil
+577,553,F,47860.53,1994-12-19T00:00:00.000-08:00,5-LOW,Clerk#000000154,0, deposits engage stealthil
+645,1144,F,350110.21,1994-12-03T00:00:00.000-08:00,2-HIGH,Clerk#000000090,0,quickly daring theodolites across the regu
+646,505,F,192105.59,1994-11-22T00:00:00.000-08:00,2-HIGH,Clerk#000000203,0,carefully even foxes. fina
+707,1162,F,80722.77,1994-11-20T00:00:00.000-08:00,3-MEDIUM,Clerk#000000199,0, ideas about the silent, bold deposits nag dolphins
+742,1030,F,258834.44,1994-12-23T00:00:00.000-08:00,5-LOW,Clerk#000000543,0,equests? slyly ironic dolphins boost carefully above the blithely
+900,460,F,173555.09,1994-10-01T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000060,0, fluffily express deposits nag furiousl
+930,1310,F,285619.42,1994-12-17T00:00:00.000-08:00,1-URGENT,Clerk#000000004,0, accounts nag slyly. ironic, ironic accounts wake blithel
+998,317,F,81009.81,1994-11-26T00:00:00.000-08:00,4-NOT SPECIFIED,Clerk#000000956,0,ronic dolphins. ironic, bold ideas haggle furiously furious
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1995/Q1/orders_95_q1.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1995/Q1/orders_95_q1.csv b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q1/orders_95_q1.csv
new file mode 100644
index 0000000..9558d2c
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q1/orders_95_q1.csv
@@ -0,0 +1,10 @@
+65,163,P,95469.44,1995-03-18T00:00:00.000-08:00,1-URGENT,Clerk#000000632,0,ular requests are blithely pending orbits-- even requests against the deposit
+386,602,F,119718.02,1995-01-25T00:00:00.000-08:00,2-HIGH,Clerk#000000648,0, haggle quickly. stealthily bold asymptotes haggle among the furiously even re
+450,475,P,213638.07,1995-03-05T00:00:00.000-08:00,4-NOT SPECIFIED,Clerk#000000293,0,d theodolites. boldly bold foxes since the pack
+643,578,P,261882.19,1995-03-25T00:00:00.000-08:00,2-HIGH,Clerk#000000354,0,g dependencies. regular accounts
+775,1333,F,75392.93,1995-03-18T00:00:00.000-08:00,1-URGENT,Clerk#000000191,0,kly express requests. fluffily silent accounts poach furiously
+802,1367,F,192178.48,1995-01-05T00:00:00.000-08:00,1-URGENT,Clerk#000000516,0,posits. ironic, pending requests cajole. even theodol
+897,490,P,88281.28,1995-03-20T00:00:00.000-08:00,1-URGENT,Clerk#000000316,0, wake quickly against
+928,658,F,315638.02,1995-03-02T00:00:00.000-08:00,5-LOW,Clerk#000000450,0,ithely express pinto beans.
+1056,275,F,41838.38,1995-02-11T00:00:00.000-08:00,1-URGENT,Clerk#000000125,0,t, even deposits hang about the slyly special i
+1092,1232,P,131664.83,1995-03-04T00:00:00.000-08:00,3-MEDIUM,Clerk#000000006,0,re quickly along the blithe
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1995/Q2/orders_95_q2.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1995/Q2/orders_95_q2.csv b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q2/orders_95_q2.csv
new file mode 100644
index 0000000..5d7059e
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q2/orders_95_q2.csv
@@ -0,0 +1,10 @@
+162,142,O,3553.15,1995-05-08T00:00:00.000-07:00,3-MEDIUM,Clerk#000000378,0,nts hinder fluffily ironic instructions. express, express excuses
+197,326,P,155247.48,1995-04-07T00:00:00.000-07:00,2-HIGH,Clerk#000000969,0,solve quickly about the even braids. carefully express deposits affix care
+225,331,P,226028.98,1995-05-25T00:00:00.000-07:00,1-URGENT,Clerk#000000177,0,s. blithely ironic accounts wake quickly fluffily special acc
+326,760,O,325448.68,1995-06-04T00:00:00.000-07:00,2-HIGH,Clerk#000000466,0, requests. furiously ironic asymptotes mold carefully alongside of the blit
+327,1447,P,32302.12,1995-04-17T00:00:00.000-07:00,5-LOW,Clerk#000000992,0,ng the slyly final courts. slyly even escapades eat
+418,949,P,39431.46,1995-04-13T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000643,0,. furiously ironic instruc
+512,631,P,183939.48,1995-05-20T00:00:00.000-07:00,5-LOW,Clerk#000000814,0,ding requests. carefully express theodolites was quickly. furious
+513,607,O,78769.71,1995-05-01T00:00:00.000-07:00,2-HIGH,Clerk#000000522,0,regular packages. pinto beans cajole carefully against the even
+551,898,O,64301.4,1995-05-30T00:00:00.000-07:00,1-URGENT,Clerk#000000179,0,xpress accounts boost quic
+613,1384,O,56355.92,1995-06-18T00:00:00.000-07:00,2-HIGH,Clerk#000000172,0,ts hinder among the deposits. fluffily ironic depos
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1995/Q3/orders_95_q3.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1995/Q3/orders_95_q3.csv b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q3/orders_95_q3.csv
new file mode 100644
index 0000000..28db042
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q3/orders_95_q3.csv
@@ -0,0 +1,10 @@
+32,1301,O,198665.57,1995-07-16T00:00:00.000-07:00,2-HIGH,Clerk#000000616,0,ise blithely bold, regular requests. quickly unusual dep
+166,1079,O,158207.39,1995-09-12T00:00:00.000-07:00,2-HIGH,Clerk#000000440,0,lets. ironic, bold asymptotes kindle
+448,1498,O,157247.56,1995-08-21T00:00:00.000-07:00,3-MEDIUM,Clerk#000000597,0, regular, express foxes use blithely. quic
+449,958,O,55082.33,1995-07-20T00:00:00.000-07:00,2-HIGH,Clerk#000000841,0,. furiously regular theodolites affix blithely
+483,349,O,66194.38,1995-07-11T00:00:00.000-07:00,2-HIGH,Clerk#000000025,0,cross the carefully final e
+550,236,O,54818.45,1995-08-02T00:00:00.000-07:00,1-URGENT,Clerk#000000204,0,t requests. blithely
+610,508,O,229411.94,1995-08-02T00:00:00.000-07:00,1-URGENT,Clerk#000000610,0,totes. ironic, unusual packag
+706,1474,O,40836.77,1995-09-09T00:00:00.000-07:00,1-URGENT,Clerk#000000448,0,g the packages. deposits caj
+740,436,O,126713.42,1995-07-16T00:00:00.000-07:00,3-MEDIUM,Clerk#000000583,0,courts haggle furiously across the final, regul
+805,1261,O,145879.67,1995-07-05T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000856,0,y according to the fluffily
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/csv/1995/Q4/orders_95_q4.csv
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/csv/1995/Q4/orders_95_q4.csv b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q4/orders_95_q4.csv
new file mode 100644
index 0000000..21c7b60
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/csv/1995/Q4/orders_95_q4.csv
@@ -0,0 +1,10 @@
+4,1369,O,56000.91,1995-10-11T00:00:00.000-07:00,5-LOW,Clerk#000000124,0,sits. slyly regular warthogs cajole. regular, regular theodolites acro
+35,1276,O,194641.93,1995-10-23T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000259,0,zzle. carefully enticing deposits nag furio
+36,1153,O,42011.04,1995-11-03T00:00:00.000-08:00,1-URGENT,Clerk#000000358,0, quick packages are blithely. slyly silent accounts wake qu
+135,605,O,230472.84,1995-10-21T00:00:00.000-07:00,4-NOT SPECIFIED,Clerk#000000804,0,l platelets use according t
+227,100,O,69020.68,1995-11-10T00:00:00.000-08:00,5-LOW,Clerk#000000919,0, express instructions. slyly regul
+262,304,O,173401.63,1995-11-25T00:00:00.000-08:00,4-NOT SPECIFIED,Clerk#000000551,0,l packages. blithely final pinto beans use carefu
+420,902,O,269064.47,1995-10-31T00:00:00.000-08:00,4-NOT SPECIFIED,Clerk#000000756,0,leep carefully final excuses. fluffily pending requests unwind carefully above
+454,488,O,24543.95,1995-12-27T00:00:00.000-08:00,5-LOW,Clerk#000000890,0,dolites sleep carefully blithely regular deposits. quickly regul
+545,632,O,35129.54,1995-11-07T00:00:00.000-08:00,2-HIGH,Clerk#000000537,0,as. blithely final hockey players about th
+679,485,O,14905.06,1995-12-15T00:00:00.000-08:00,2-HIGH,Clerk#000000853,0,tealthy, final pinto beans haggle slyly. pending platelets about the special,
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1994/Q1/orders_94_q1.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1994/Q1/orders_94_q1.json b/exec/java-exec/src/test/resources/multilevel/json/1994/Q1/orders_94_q1.json
new file mode 100644
index 0000000..da6ce00
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1994/Q1/orders_94_q1.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 66,
+ "o_custkey" : 1292,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 104190.66,
+ "o_orderdate" : "1994-01-20T00:00:00.000-08:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000743",
+ "o_shippriority" : 0,
+ "o_comment" : "y pending requests integrate"
+} {
+ "o_orderkey" : 99,
+ "o_custkey" : 890,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 108594.87,
+ "o_orderdate" : "1994-03-13T00:00:00.000-08:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000973",
+ "o_shippriority" : 0,
+ "o_comment" : "e carefully ironic packages. pending"
+} {
+ "o_orderkey" : 290,
+ "o_custkey" : 1180,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 67636.54,
+ "o_orderdate" : "1994-01-01T00:00:00.000-08:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000735",
+ "o_shippriority" : 0,
+ "o_comment" : "efully dogged deposits. furiou"
+} {
+ "o_orderkey" : 291,
+ "o_custkey" : 1411,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 88375.89,
+ "o_orderdate" : "1994-03-13T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000923",
+ "o_shippriority" : 0,
+ "o_comment" : "dolites. carefully regular pinto beans cajol"
+} {
+ "o_orderkey" : 323,
+ "o_custkey" : 392,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 121127.17,
+ "o_orderdate" : "1994-03-26T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000959",
+ "o_shippriority" : 0,
+ "o_comment" : "arefully pending foxes sleep blithely. slyly express accoun"
+} {
+ "o_orderkey" : 352,
+ "o_custkey" : 1066,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 25542.02,
+ "o_orderdate" : "1994-03-08T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000932",
+ "o_shippriority" : 0,
+ "o_comment" : "ke slyly bold pinto beans. blithely regular accounts against the spe"
+} {
+ "o_orderkey" : 389,
+ "o_custkey" : 1270,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 3266.69,
+ "o_orderdate" : "1994-02-17T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000062",
+ "o_shippriority" : 0,
+ "o_comment" : "ing to the regular asymptotes. final, pending foxes about the blithely sil"
+} {
+ "o_orderkey" : 417,
+ "o_custkey" : 547,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 132531.73,
+ "o_orderdate" : "1994-02-06T00:00:00.000-08:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000468",
+ "o_shippriority" : 0,
+ "o_comment" : "ironic, even packages. thinly unusual accounts sleep along the slyly unusual "
+} {
+ "o_orderkey" : 673,
+ "o_custkey" : 793,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 34950.94,
+ "o_orderdate" : "1994-03-10T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000448",
+ "o_shippriority" : 0,
+ "o_comment" : " special pinto beans use quickly furiously even depende"
+} {
+ "o_orderkey" : 833,
+ "o_custkey" : 553,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 53948.73,
+ "o_orderdate" : "1994-02-13T00:00:00.000-08:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000437",
+ "o_shippriority" : 0,
+ "o_comment" : "ts haggle quickly across the slyl"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1994/Q2/orders_94_q2.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1994/Q2/orders_94_q2.json b/exec/java-exec/src/test/resources/multilevel/json/1994/Q2/orders_94_q2.json
new file mode 100644
index 0000000..bc42db6
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1994/Q2/orders_94_q2.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 69,
+ "o_custkey" : 845,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 204110.73,
+ "o_orderdate" : "1994-06-04T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000330",
+ "o_shippriority" : 0,
+ "o_comment" : " depths atop the slyly thin deposits detect among the furiously silent accou"
+} {
+ "o_orderkey" : 96,
+ "o_custkey" : 1078,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 64364.3,
+ "o_orderdate" : "1994-04-17T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000395",
+ "o_shippriority" : 0,
+ "o_comment" : "oost furiously. pinto"
+} {
+ "o_orderkey" : 131,
+ "o_custkey" : 928,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 140726.47,
+ "o_orderdate" : "1994-06-08T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000625",
+ "o_shippriority" : 0,
+ "o_comment" : "after the fluffily special foxes integrate s"
+} {
+ "o_orderkey" : 224,
+ "o_custkey" : 25,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 234050.44,
+ "o_orderdate" : "1994-06-18T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000642",
+ "o_shippriority" : 0,
+ "o_comment" : "r the quickly thin courts. carefully"
+} {
+ "o_orderkey" : 263,
+ "o_custkey" : 1162,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 104961.32,
+ "o_orderdate" : "1994-05-17T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000088",
+ "o_shippriority" : 0,
+ "o_comment" : " pending instructions. blithely un"
+} {
+ "o_orderkey" : 355,
+ "o_custkey" : 701,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 103949.82,
+ "o_orderdate" : "1994-06-14T00:00:00.000-07:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000532",
+ "o_shippriority" : 0,
+ "o_comment" : "s. sometimes regular requests cajole. regular, pending accounts a"
+} {
+ "o_orderkey" : 356,
+ "o_custkey" : 1469,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 189160.02,
+ "o_orderdate" : "1994-06-30T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000944",
+ "o_shippriority" : 0,
+ "o_comment" : "as wake along the bold accounts. even, "
+} {
+ "o_orderkey" : 609,
+ "o_custkey" : 1252,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 33980.88,
+ "o_orderdate" : "1994-06-01T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000348",
+ "o_shippriority" : 0,
+ "o_comment" : "- ironic gifts believe furiously ca"
+} {
+ "o_orderkey" : 672,
+ "o_custkey" : 1081,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 128581.82,
+ "o_orderdate" : "1994-04-14T00:00:00.000-07:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000106",
+ "o_shippriority" : 0,
+ "o_comment" : "egular requests are furiously according to "
+} {
+ "o_orderkey" : 834,
+ "o_custkey" : 428,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 57631.12,
+ "o_orderdate" : "1994-05-23T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000805",
+ "o_shippriority" : 0,
+ "o_comment" : " sleep. quickly even foxes are boldly. slyly express requests use slyly"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1994/Q3/orders_94_q3.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1994/Q3/orders_94_q3.json b/exec/java-exec/src/test/resources/multilevel/json/1994/Q3/orders_94_q3.json
new file mode 100644
index 0000000..ae6263a
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1994/Q3/orders_94_q3.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 5,
+ "o_custkey" : 445,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 105367.67,
+ "o_orderdate" : "1994-07-30T00:00:00.000-07:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000925",
+ "o_shippriority" : 0,
+ "o_comment" : "quickly. bold deposits sleep slyly. packages use slyly"
+} {
+ "o_orderkey" : 64,
+ "o_custkey" : 322,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 35831.73,
+ "o_orderdate" : "1994-07-16T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000661",
+ "o_shippriority" : 0,
+ "o_comment" : "wake fluffily. sometimes ironic pinto beans about the dolphin"
+} {
+ "o_orderkey" : 98,
+ "o_custkey" : 1045,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 71721.4,
+ "o_orderdate" : "1994-09-25T00:00:00.000-07:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000448",
+ "o_shippriority" : 0,
+ "o_comment" : "c asymptotes. quickly regular packages should have to nag re"
+} {
+ "o_orderkey" : 161,
+ "o_custkey" : 167,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 17668.6,
+ "o_orderdate" : "1994-08-31T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000322",
+ "o_shippriority" : 0,
+ "o_comment" : "carefully! special instructions sin"
+} {
+ "o_orderkey" : 231,
+ "o_custkey" : 910,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 234383.86,
+ "o_orderdate" : "1994-09-29T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000446",
+ "o_shippriority" : 0,
+ "o_comment" : " packages haggle slyly after the carefully ironic instruct"
+} {
+ "o_orderkey" : 295,
+ "o_custkey" : 190,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 148569.49,
+ "o_orderdate" : "1994-09-29T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000155",
+ "o_shippriority" : 0,
+ "o_comment" : " unusual pinto beans play. regular ideas haggle"
+} {
+ "o_orderkey" : 548,
+ "o_custkey" : 1240,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 139094.89,
+ "o_orderdate" : "1994-09-21T00:00:00.000-07:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000435",
+ "o_shippriority" : 0,
+ "o_comment" : "arefully express instru"
+} {
+ "o_orderkey" : 902,
+ "o_custkey" : 86,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 49777.81,
+ "o_orderdate" : "1994-07-27T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000811",
+ "o_shippriority" : 0,
+ "o_comment" : "yly final requests over the furiously regula"
+} {
+ "o_orderkey" : 960,
+ "o_custkey" : 347,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 84356.33,
+ "o_orderdate" : "1994-09-21T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000120",
+ "o_shippriority" : 0,
+ "o_comment" : "regular accounts. requests"
+} {
+ "o_orderkey" : 1031,
+ "o_custkey" : 37,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 203268.37,
+ "o_orderdate" : "1994-09-01T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000448",
+ "o_shippriority" : 0,
+ "o_comment" : "s; ironic theodolites along the carefully ex"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1994/Q4/orders_94_q4.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1994/Q4/orders_94_q4.json b/exec/java-exec/src/test/resources/multilevel/json/1994/Q4/orders_94_q4.json
new file mode 100644
index 0000000..d15cb9e
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1994/Q4/orders_94_q4.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 359,
+ "o_custkey" : 776,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 214770.97,
+ "o_orderdate" : "1994-12-19T00:00:00.000-08:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000934",
+ "o_shippriority" : 0,
+ "o_comment" : "n dolphins. special courts above the carefully ironic requests use"
+} {
+ "o_orderkey" : 391,
+ "o_custkey" : 1103,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 14517.91,
+ "o_orderdate" : "1994-11-17T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000256",
+ "o_shippriority" : 0,
+ "o_comment" : "orges thrash fluffil"
+} {
+ "o_orderkey" : 577,
+ "o_custkey" : 553,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 47860.53,
+ "o_orderdate" : "1994-12-19T00:00:00.000-08:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000154",
+ "o_shippriority" : 0,
+ "o_comment" : " deposits engage stealthil"
+} {
+ "o_orderkey" : 645,
+ "o_custkey" : 1144,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 350110.21,
+ "o_orderdate" : "1994-12-03T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000090",
+ "o_shippriority" : 0,
+ "o_comment" : "quickly daring theodolites across the regu"
+} {
+ "o_orderkey" : 646,
+ "o_custkey" : 505,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 192105.59,
+ "o_orderdate" : "1994-11-22T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000203",
+ "o_shippriority" : 0,
+ "o_comment" : "carefully even foxes. fina"
+} {
+ "o_orderkey" : 707,
+ "o_custkey" : 1162,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 80722.77,
+ "o_orderdate" : "1994-11-20T00:00:00.000-08:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000199",
+ "o_shippriority" : 0,
+ "o_comment" : " ideas about the silent, bold deposits nag dolphins"
+} {
+ "o_orderkey" : 742,
+ "o_custkey" : 1030,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 258834.44,
+ "o_orderdate" : "1994-12-23T00:00:00.000-08:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000543",
+ "o_shippriority" : 0,
+ "o_comment" : "equests? slyly ironic dolphins boost carefully above the blithely"
+} {
+ "o_orderkey" : 900,
+ "o_custkey" : 460,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 173555.09,
+ "o_orderdate" : "1994-10-01T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000060",
+ "o_shippriority" : 0,
+ "o_comment" : " fluffily express deposits nag furiousl"
+} {
+ "o_orderkey" : 930,
+ "o_custkey" : 1310,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 285619.42,
+ "o_orderdate" : "1994-12-17T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000004",
+ "o_shippriority" : 0,
+ "o_comment" : " accounts nag slyly. ironic, ironic accounts wake blithel"
+} {
+ "o_orderkey" : 998,
+ "o_custkey" : 317,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 81009.81,
+ "o_orderdate" : "1994-11-26T00:00:00.000-08:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000956",
+ "o_shippriority" : 0,
+ "o_comment" : "ronic dolphins. ironic, bold ideas haggle furiously furious"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1995/Q1/orders_95_q1.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1995/Q1/orders_95_q1.json b/exec/java-exec/src/test/resources/multilevel/json/1995/Q1/orders_95_q1.json
new file mode 100644
index 0000000..704b664
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1995/Q1/orders_95_q1.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 65,
+ "o_custkey" : 163,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 95469.44,
+ "o_orderdate" : "1995-03-18T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000632",
+ "o_shippriority" : 0,
+ "o_comment" : "ular requests are blithely pending orbits-- even requests against the deposit"
+} {
+ "o_orderkey" : 386,
+ "o_custkey" : 602,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 119718.02,
+ "o_orderdate" : "1995-01-25T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000648",
+ "o_shippriority" : 0,
+ "o_comment" : " haggle quickly. stealthily bold asymptotes haggle among the furiously even re"
+} {
+ "o_orderkey" : 450,
+ "o_custkey" : 475,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 213638.07,
+ "o_orderdate" : "1995-03-05T00:00:00.000-08:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000293",
+ "o_shippriority" : 0,
+ "o_comment" : "d theodolites. boldly bold foxes since the pack"
+} {
+ "o_orderkey" : 643,
+ "o_custkey" : 578,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 261882.19,
+ "o_orderdate" : "1995-03-25T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000354",
+ "o_shippriority" : 0,
+ "o_comment" : "g dependencies. regular accounts "
+} {
+ "o_orderkey" : 775,
+ "o_custkey" : 1333,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 75392.93,
+ "o_orderdate" : "1995-03-18T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000191",
+ "o_shippriority" : 0,
+ "o_comment" : "kly express requests. fluffily silent accounts poach furiously"
+} {
+ "o_orderkey" : 802,
+ "o_custkey" : 1367,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 192178.48,
+ "o_orderdate" : "1995-01-05T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000516",
+ "o_shippriority" : 0,
+ "o_comment" : "posits. ironic, pending requests cajole. even theodol"
+} {
+ "o_orderkey" : 897,
+ "o_custkey" : 490,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 88281.28,
+ "o_orderdate" : "1995-03-20T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000316",
+ "o_shippriority" : 0,
+ "o_comment" : " wake quickly against "
+} {
+ "o_orderkey" : 928,
+ "o_custkey" : 658,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 315638.02,
+ "o_orderdate" : "1995-03-02T00:00:00.000-08:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000450",
+ "o_shippriority" : 0,
+ "o_comment" : "ithely express pinto beans. "
+} {
+ "o_orderkey" : 1056,
+ "o_custkey" : 275,
+ "o_orderstatus" : "F",
+ "o_totalprice" : 41838.38,
+ "o_orderdate" : "1995-02-11T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000125",
+ "o_shippriority" : 0,
+ "o_comment" : "t, even deposits hang about the slyly special i"
+} {
+ "o_orderkey" : 1092,
+ "o_custkey" : 1232,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 131664.83,
+ "o_orderdate" : "1995-03-04T00:00:00.000-08:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000006",
+ "o_shippriority" : 0,
+ "o_comment" : "re quickly along the blithe"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1995/Q2/orders_95_q2.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1995/Q2/orders_95_q2.json b/exec/java-exec/src/test/resources/multilevel/json/1995/Q2/orders_95_q2.json
new file mode 100644
index 0000000..affbc1d
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1995/Q2/orders_95_q2.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 162,
+ "o_custkey" : 142,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 3553.15,
+ "o_orderdate" : "1995-05-08T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000378",
+ "o_shippriority" : 0,
+ "o_comment" : "nts hinder fluffily ironic instructions. express, express excuses "
+} {
+ "o_orderkey" : 197,
+ "o_custkey" : 326,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 155247.48,
+ "o_orderdate" : "1995-04-07T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000969",
+ "o_shippriority" : 0,
+ "o_comment" : "solve quickly about the even braids. carefully express deposits affix care"
+} {
+ "o_orderkey" : 225,
+ "o_custkey" : 331,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 226028.98,
+ "o_orderdate" : "1995-05-25T00:00:00.000-07:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000177",
+ "o_shippriority" : 0,
+ "o_comment" : "s. blithely ironic accounts wake quickly fluffily special acc"
+} {
+ "o_orderkey" : 326,
+ "o_custkey" : 760,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 325448.68,
+ "o_orderdate" : "1995-06-04T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000466",
+ "o_shippriority" : 0,
+ "o_comment" : " requests. furiously ironic asymptotes mold carefully alongside of the blit"
+} {
+ "o_orderkey" : 327,
+ "o_custkey" : 1447,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 32302.12,
+ "o_orderdate" : "1995-04-17T00:00:00.000-07:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000992",
+ "o_shippriority" : 0,
+ "o_comment" : "ng the slyly final courts. slyly even escapades eat "
+} {
+ "o_orderkey" : 418,
+ "o_custkey" : 949,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 39431.46,
+ "o_orderdate" : "1995-04-13T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000643",
+ "o_shippriority" : 0,
+ "o_comment" : ". furiously ironic instruc"
+} {
+ "o_orderkey" : 512,
+ "o_custkey" : 631,
+ "o_orderstatus" : "P",
+ "o_totalprice" : 183939.48,
+ "o_orderdate" : "1995-05-20T00:00:00.000-07:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000814",
+ "o_shippriority" : 0,
+ "o_comment" : "ding requests. carefully express theodolites was quickly. furious"
+} {
+ "o_orderkey" : 513,
+ "o_custkey" : 607,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 78769.71,
+ "o_orderdate" : "1995-05-01T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000522",
+ "o_shippriority" : 0,
+ "o_comment" : "regular packages. pinto beans cajole carefully against the even"
+} {
+ "o_orderkey" : 551,
+ "o_custkey" : 898,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 64301.4,
+ "o_orderdate" : "1995-05-30T00:00:00.000-07:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000179",
+ "o_shippriority" : 0,
+ "o_comment" : "xpress accounts boost quic"
+} {
+ "o_orderkey" : 613,
+ "o_custkey" : 1384,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 56355.92,
+ "o_orderdate" : "1995-06-18T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000172",
+ "o_shippriority" : 0,
+ "o_comment" : "ts hinder among the deposits. fluffily ironic depos"
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1995/Q3/orders_95_q3.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1995/Q3/orders_95_q3.json b/exec/java-exec/src/test/resources/multilevel/json/1995/Q3/orders_95_q3.json
new file mode 100644
index 0000000..acb4dbc
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1995/Q3/orders_95_q3.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 32,
+ "o_custkey" : 1301,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 198665.57,
+ "o_orderdate" : "1995-07-16T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000616",
+ "o_shippriority" : 0,
+ "o_comment" : "ise blithely bold, regular requests. quickly unusual dep"
+} {
+ "o_orderkey" : 166,
+ "o_custkey" : 1079,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 158207.39,
+ "o_orderdate" : "1995-09-12T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000440",
+ "o_shippriority" : 0,
+ "o_comment" : "lets. ironic, bold asymptotes kindle"
+} {
+ "o_orderkey" : 448,
+ "o_custkey" : 1498,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 157247.56,
+ "o_orderdate" : "1995-08-21T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000597",
+ "o_shippriority" : 0,
+ "o_comment" : " regular, express foxes use blithely. quic"
+} {
+ "o_orderkey" : 449,
+ "o_custkey" : 958,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 55082.33,
+ "o_orderdate" : "1995-07-20T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000841",
+ "o_shippriority" : 0,
+ "o_comment" : ". furiously regular theodolites affix blithely "
+} {
+ "o_orderkey" : 483,
+ "o_custkey" : 349,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 66194.38,
+ "o_orderdate" : "1995-07-11T00:00:00.000-07:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000025",
+ "o_shippriority" : 0,
+ "o_comment" : "cross the carefully final e"
+} {
+ "o_orderkey" : 550,
+ "o_custkey" : 236,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 54818.45,
+ "o_orderdate" : "1995-08-02T00:00:00.000-07:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000204",
+ "o_shippriority" : 0,
+ "o_comment" : "t requests. blithely "
+} {
+ "o_orderkey" : 610,
+ "o_custkey" : 508,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 229411.94,
+ "o_orderdate" : "1995-08-02T00:00:00.000-07:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000610",
+ "o_shippriority" : 0,
+ "o_comment" : "totes. ironic, unusual packag"
+} {
+ "o_orderkey" : 706,
+ "o_custkey" : 1474,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 40836.77,
+ "o_orderdate" : "1995-09-09T00:00:00.000-07:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000448",
+ "o_shippriority" : 0,
+ "o_comment" : "g the packages. deposits caj"
+} {
+ "o_orderkey" : 740,
+ "o_custkey" : 436,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 126713.42,
+ "o_orderdate" : "1995-07-16T00:00:00.000-07:00",
+ "o_orderpriority" : "3-MEDIUM",
+ "o_clerk" : "Clerk#000000583",
+ "o_shippriority" : 0,
+ "o_comment" : "courts haggle furiously across the final, regul"
+} {
+ "o_orderkey" : 805,
+ "o_custkey" : 1261,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 145879.67,
+ "o_orderdate" : "1995-07-05T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000856",
+ "o_shippriority" : 0,
+ "o_comment" : "y according to the fluffily "
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/json/1995/Q4/orders_95_q4.json
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/json/1995/Q4/orders_95_q4.json b/exec/java-exec/src/test/resources/multilevel/json/1995/Q4/orders_95_q4.json
new file mode 100644
index 0000000..68fbbec
--- /dev/null
+++ b/exec/java-exec/src/test/resources/multilevel/json/1995/Q4/orders_95_q4.json
@@ -0,0 +1,101 @@
+{
+ "o_orderkey" : 4,
+ "o_custkey" : 1369,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 56000.91,
+ "o_orderdate" : "1995-10-11T00:00:00.000-07:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000124",
+ "o_shippriority" : 0,
+ "o_comment" : "sits. slyly regular warthogs cajole. regular, regular theodolites acro"
+} {
+ "o_orderkey" : 35,
+ "o_custkey" : 1276,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 194641.93,
+ "o_orderdate" : "1995-10-23T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000259",
+ "o_shippriority" : 0,
+ "o_comment" : "zzle. carefully enticing deposits nag furio"
+} {
+ "o_orderkey" : 36,
+ "o_custkey" : 1153,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 42011.04,
+ "o_orderdate" : "1995-11-03T00:00:00.000-08:00",
+ "o_orderpriority" : "1-URGENT",
+ "o_clerk" : "Clerk#000000358",
+ "o_shippriority" : 0,
+ "o_comment" : " quick packages are blithely. slyly silent accounts wake qu"
+} {
+ "o_orderkey" : 135,
+ "o_custkey" : 605,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 230472.84,
+ "o_orderdate" : "1995-10-21T00:00:00.000-07:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000804",
+ "o_shippriority" : 0,
+ "o_comment" : "l platelets use according t"
+} {
+ "o_orderkey" : 227,
+ "o_custkey" : 100,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 69020.68,
+ "o_orderdate" : "1995-11-10T00:00:00.000-08:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000919",
+ "o_shippriority" : 0,
+ "o_comment" : " express instructions. slyly regul"
+} {
+ "o_orderkey" : 262,
+ "o_custkey" : 304,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 173401.63,
+ "o_orderdate" : "1995-11-25T00:00:00.000-08:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000551",
+ "o_shippriority" : 0,
+ "o_comment" : "l packages. blithely final pinto beans use carefu"
+} {
+ "o_orderkey" : 420,
+ "o_custkey" : 902,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 269064.47,
+ "o_orderdate" : "1995-10-31T00:00:00.000-08:00",
+ "o_orderpriority" : "4-NOT SPECIFIED",
+ "o_clerk" : "Clerk#000000756",
+ "o_shippriority" : 0,
+ "o_comment" : "leep carefully final excuses. fluffily pending requests unwind carefully above"
+} {
+ "o_orderkey" : 454,
+ "o_custkey" : 488,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 24543.95,
+ "o_orderdate" : "1995-12-27T00:00:00.000-08:00",
+ "o_orderpriority" : "5-LOW",
+ "o_clerk" : "Clerk#000000890",
+ "o_shippriority" : 0,
+ "o_comment" : "dolites sleep carefully blithely regular deposits. quickly regul"
+} {
+ "o_orderkey" : 545,
+ "o_custkey" : 632,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 35129.54,
+ "o_orderdate" : "1995-11-07T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000537",
+ "o_shippriority" : 0,
+ "o_comment" : "as. blithely final hockey players about th"
+} {
+ "o_orderkey" : 679,
+ "o_custkey" : 485,
+ "o_orderstatus" : "O",
+ "o_totalprice" : 14905.06,
+ "o_orderdate" : "1995-12-15T00:00:00.000-08:00",
+ "o_orderpriority" : "2-HIGH",
+ "o_clerk" : "Clerk#000000853",
+ "o_shippriority" : 0,
+ "o_comment" : "tealthy, final pinto beans haggle slyly. pending platelets about the special, "
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q1/orders_94_q1.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q1/orders_94_q1.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q1/orders_94_q1.parquet
new file mode 100644
index 0000000..b4abe60
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q1/orders_94_q1.parquet differ
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q2/orders_94_q2.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q2/orders_94_q2.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q2/orders_94_q2.parquet
new file mode 100644
index 0000000..f5338af
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q2/orders_94_q2.parquet differ
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q3/orders_94_q3.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q3/orders_94_q3.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q3/orders_94_q3.parquet
new file mode 100644
index 0000000..16cb2c4
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q3/orders_94_q3.parquet differ
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q4/orders_94_q4.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q4/orders_94_q4.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q4/orders_94_q4.parquet
new file mode 100644
index 0000000..bf0ed05
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1994/Q4/orders_94_q4.parquet differ
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q1/orders_95_q1.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q1/orders_95_q1.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q1/orders_95_q1.parquet
new file mode 100644
index 0000000..93514c4
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q1/orders_95_q1.parquet differ
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q2/orders_95_q2.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q2/orders_95_q2.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q2/orders_95_q2.parquet
new file mode 100644
index 0000000..e8ae33e
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q2/orders_95_q2.parquet differ
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q3/orders_95_q3.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q3/orders_95_q3.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q3/orders_95_q3.parquet
new file mode 100644
index 0000000..aae46dd
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q3/orders_95_q3.parquet differ
http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/1959ec66/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q4/orders_95_q4.parquet
----------------------------------------------------------------------
diff --git a/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q4/orders_95_q4.parquet b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q4/orders_95_q4.parquet
new file mode 100644
index 0000000..bae64e3
Binary files /dev/null and b/exec/java-exec/src/test/resources/multilevel/parquet/1995/Q4/orders_95_q4.parquet differ