Chun Chang created DRILL-1745:
---------------------------------
Summary: order by a json array element caused
IndexOutOfBoundsException
Key: DRILL-1745
URL: https://issues.apache.org/jira/browse/DRILL-1745
Project: Apache Drill
Issue Type: Bug
Components: Storage - JSON
Affects Versions: 0.7.0
Reporter: Chun Chang
#Thu Nov 13 22:54:15 EST 2014
git.commit.id.abbrev=108d29f
JSON data has 1 million rows. The following query works:
0: jdbc:drill:schema=dfs> select t.gbyt, t.id from `complex.json` t order by
t.id limit 10;
+------------+------------+
| gbyt | id |
+------------+------------+
| soa | 1 |
| oooa | 2 |
| bool | 3 |
| nul | 4 |
| gbyi | 5 |
| bool | 6 |
| soa | 7 |
| bool | 8 |
| oooa | 9 |
| oooa | 10 |
+------------+------------+
10 rows selected (102.968 seconds)
But if I added the following element, it will cause the exception. Without
order by also works.
0: jdbc:drill:schema=dfs> select t.gbyt, t.id, t.ooa[0].`in` zeroin from
`complex.json` t order by t.id limit 10;
+------------+------------+------------+
| gbyt | id | zeroin |
+------------+------------+------------+
Query failed: Failure while running fragment., writerIndex: 4098 (expected:
readerIndex(0) <= writerIndex <= capacity(4096)) [
81970fea-5f90-402d-a437-64cad4c4ebc4 on qa-node120.qa.lab:31010 ]
java.lang.RuntimeException: java.sql.SQLException: Failure while executing
query.
at sqlline.SqlLine$IncrementalRows.hasNext(SqlLine.java:2514)
at sqlline.SqlLine$TableOutputFormat.print(SqlLine.java:2148)
at sqlline.SqlLine.print(SqlLine.java:1809)
at sqlline.SqlLine$Commands.execute(SqlLine.java:3766)
at sqlline.SqlLine$Commands.sql(SqlLine.java:3663)
at sqlline.SqlLine.dispatch(SqlLine.java:889)
at sqlline.SqlLine.begin(SqlLine.java:763)
at sqlline.SqlLine.start(SqlLine.java:498)
at sqlline.SqlLine.main(SqlLine.java:460)
0: jdbc:drill:schema=dfs>
Here is the exception stack:
2014-11-18 18:42:51,791 [f72592cc-8bb3-479a-b137-adb82787f44e:frag:2:0] ERROR
o.a.drill.exec.ops.FragmentContext - Fragment Context received failure.
java.lang.IndexOutOfBoundsException: writerIndex: 4098 (expected:
readerIndex(0) <= writerIndex <= capacity(4096))
at io.netty.buffer.AbstractByteBuf.writerIndex(AbstractByteBuf.java:88)
~[netty-buffer-4.0.24.Final.jar:4.0.24.Final]
at
org.apache.drill.exec.vector.VectorTrimmer.trim(VectorTrimmer.java:27)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.UInt1Vector$Mutator.setValueCount(UInt1Vector.java:420)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.NullableVarCharVector$Mutator.setValueCount(NullableVarCharVector.java:547)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.complex.MapVector$Mutator.setValueCount(MapVector.java:420)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.complex.MapVector$Mutator.setValueCount(MapVector.java:420)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.complex.RepeatedMapVector$Mutator.setValueCount(RepeatedMapVector.java:615)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.complex.MapVector$Mutator.setValueCount(MapVector.java:420)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.complex.impl.SingleMapWriter.setValueCount(SingleMapWriter.java:163)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.vector.complex.impl.VectorContainerWriter.setValueCount(VectorContainerWriter.java:73)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.store.easy.json.JSONRecordReader2.next(JSONRecordReader2.java:133)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.physical.impl.ScanBatch.next(ScanBatch.java:191)
~[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.physical.impl.validate.IteratorValidatorBatchIterator.next(IteratorValidatorBatchIterator.java:124)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:86)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:76)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.record.AbstractSingleRecordBatch.innerNext(AbstractSingleRecordBatch.java:52)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.physical.impl.project.ProjectRecordBatch.innerNext(ProjectRecordBatch.java:129)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.record.AbstractRecordBatch.next(AbstractRecordBatch.java:106)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.physical.impl.validate.IteratorValidatorBatchIterator.next(IteratorValidatorBatchIterator.java:124)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:67)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.physical.impl.partitionsender.PartitionSenderRootExec.innerNext(PartitionSenderRootExec.java:141)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.physical.impl.BaseRootExec.next(BaseRootExec.java:57)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.work.fragment.FragmentExecutor.run(FragmentExecutor.java:113)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
org.apache.drill.exec.work.WorkManager$RunnableWrapper.run(WorkManager.java:249)
[drill-java-exec-0.6.0.r2-incubating-SNAPSHOT-rebuffed.jar:0.6.0.r2-incubating-SNAPSHOT]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[na:1.7.0_45]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[na:1.7.0_45]
at java.lang.Thread.run(Thread.java:744) [na:1.7.0_45]
Without order by works:
0: jdbc:drill:schema=dfs> select t.gbyt, t.id, t.ooa[0].`in` zeroin from
`complex.json` t limit 10;
+------------+------------+------------+
| gbyt | id | zeroin |
+------------+------------+------------+
| soa | 1 | 1 |
| oooa | 2 | 2 |
| bool | 3 | 3 |
| nul | 4 | 4 |
| gbyi | 5 | 5 |
| bool | 6 | null |
| soa | 7 | 7 |
| bool | 8 | 8 |
| oooa | 9 | 9 |
| oooa | 10 | 10 |
+------------+------------+------------+
10 rows selected (0.255 seconds)
Plan:
0: jdbc:drill:schema=dfs> explain plan for select t.gbyt, t.id, t.ooa[0].`in`
zeroin from `complex.json` t order by t.id limit 10;
+------------+------------+
| text | json |
+------------+------------+
| 00-00 Screen
00-01 Project(gbyt=[$0], id=[$1], zeroin=[$2])
00-02 SelectionVectorRemover
00-03 Limit(fetch=[10])
00-04 SingleMergeExchange(sort0=[1 ASC])
01-01 SelectionVectorRemover
01-02 TopN(limit=[10])
01-03 HashToRandomExchange(dist0=[[$1]])
02-01 Project(gbyt=[$1], id=[$2], zeroin=[ITEM(ITEM($0, 0),
'in')])
02-02 Scan(groupscan=[EasyGroupScan
[selectionRoot=/drill/testdata/mondrian/complex.json, numFiles=1,
columns=[`gbyt`, `id`, `ooa`[0].`in`],
files=[maprfs:/drill/testdata/mondrian/complex.json]]])
| {
"head" : {
"version" : 1,
"generator" : {
"type" : "ExplainHandler",
"info" : ""
},
"type" : "APACHE_DRILL_PHYSICAL",
"options" : [ ],
"queue" : 0,
"resultMode" : "EXEC"
},
"graph" : [ {
"pop" : "fs-scan",
"@id" : 131074,
"files" : [ "maprfs:/drill/testdata/mondrian/complex.json" ],
"storage" : {
"type" : "file",
"enabled" : true,
"connection" : "maprfs:///",
"workspaces" : {
"root" : {
"location" : "/",
"writable" : false,
"defaultInputFormat" : null
},
"tmp" : {
"location" : "/tmp",
"writable" : true,
"defaultInputFormat" : null
},
"default" : {
"location" : "/drill/testdata/mondrian",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDir" : {
"location" : "/drill/testdata/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirAmplab" : {
"location" : "/drill/testdata/amplab",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirInformationSchema" : {
"location" : "/drill/testdata/information-schema",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirUdfs" : {
"location" : "/drill/testdata/udfs/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirP1" : {
"location" : "/drill/testdata/p1tests",
"writable" : true,
"defaultInputFormat" : null
},
"Join" : {
"location" : "/drill/testdata/join",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirExchanges" : {
"location" : "/drill/testdata/exchanges_test",
"writable" : true,
"defaultInputFormat" : null
},
"TpcHMulti" : {
"location" : "/drill/testdata/tpch-multi",
"writable" : true,
"defaultInputFormat" : null
},
"TpcHMulti100" : {
"location" : "/drill/testdata/SF100",
"writable" : true,
"defaultInputFormat" : null
},
"TpcHMulti1" : {
"location" : "/drill/testdata/tpch_SF1",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirExplicit" : {
"location" : "/drill/testdata/explicit_cast",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirImplicit" : {
"location" : "/drill/testdata/implicit_cast",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirImplicit1" : {
"location" : "/drill/testdata/implicit_cast",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTPCDS" : {
"location" : "/user/root/tpcds/parquet",
"writable" : true,
"defaultInputFormat" : null
},
"TPCDS" : {
"location" : "/drill/testdata/tpcds",
"writable" : true,
"defaultInputFormat" : null
},
"drillMondrian" : {
"location" : "/user/root/mondrian",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirDatetime" : {
"location" : "/drill/testdata/datetime/datasources",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirViews" : {
"location" : "/drill/testdata/views/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirNumerical" : {
"location" : "/drill/testdata/numerical/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirJson" : {
"location" : "/drill/testdata/json_storage/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTestNewWS" : {
"location" : "/drill/testdata/newWS/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTpch01Text" : {
"location" : "/drill/testdata/Tpch0.01/text/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTpch01Json" : {
"location" : "/drill/testdata/Tpch0.01/json/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTpch01Parquet" : {
"location" : "/drill/testdata/Tpch0.01/parquet/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirConvert" : {
"location" : "/drill/testdata/convert",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTpch100Text" : {
"location" : "/drill/testdata/tpch100/text/",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTpch100Parquet" : {
"location" : "/drill/testdata/tpch100/parquet",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirAggregate1parquet" : {
"location" : "/drill/testdata/tpcds/parquet/s1",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirAggregate1csv" : {
"location" : "/drill/testdata/tpcds/csv/s1",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirAggregate1json" : {
"location" : "/drill/testdata/tpcds/json/s1",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirMondrian" : {
"location" : "/drill/testdata/mondrian",
"writable" : true,
"defaultInputFormat" : null
},
"drillTestDirTpcdsImpalaSF1" : {
"location" : "/drill/testdata/tpcds-impala-sf1",
"writable" : true,
"defaultInputFormat" : null
},
"sandbox" : {
"location" : "/sandbox",
"writable" : true,
"defaultInputFormat" : null
},
"sandbox-logs" : {
"location" : "/sandbox/flat",
"writable" : true,
"defaultInputFormat" : null
},
"sandbox-json" : {
"location" : "/sandbox/json",
"writable" : true,
"defaultInputFormat" : null
}
},
"formats" : {
"psv" : {
"type" : "text",
"extensions" : [ "tbl" ],
"delimiter" : "|"
},
"dsv" : {
"type" : "text",
"extensions" : [ "dat" ],
"delimiter" : "|"
},
"csv" : {
"type" : "text",
"extensions" : [ "csv" ],
"delimiter" : ","
},
"tsv" : {
"type" : "text",
"extensions" : [ "tsv" ],
"delimiter" : "\t"
},
"parquet" : {
"type" : "parquet"
},
"json" : {
"type" : "json"
}
}
},
"format" : {
"type" : "json"
},
"columns" : [ "`gbyt`", "`id`", "`ooa`[0].`in`" ],
"selectionRoot" : "/drill/testdata/mondrian/complex.json",
"cost" : 1186767.0
}, {
"pop" : "project",
"@id" : 131073,
"exprs" : [ {
"ref" : "`gbyt`",
"expr" : "`gbyt`"
}, {
"ref" : "`id`",
"expr" : "`id`"
}, {
"ref" : "`zeroin`",
"expr" : "`ooa`[0].`in`"
} ],
"child" : 131074,
"initialAllocation" : 1000000,
"maxAllocation" : 10000000000,
"cost" : 1186767.0
}, {
"pop" : "hash-to-random-exchange",
"@id" : 65539,
"child" : 131073,
"expr" : "hash(`id`) ",
"initialAllocation" : 1000000,
"maxAllocation" : 10000000000,
"cost" : 1186767.0
}, {
"pop" : "top-n",
"@id" : 65538,
"child" : 65539,
"orderings" : [ {
"order" : "ASC",
"expr" : "`id`",
"nullDirection" : "UNSPECIFIED"
} ],
"reverse" : false,
"limit" : 10,
"initialAllocation" : 1000000,
"maxAllocation" : 10000000000,
"cost" : 1186767.0
}, {
"pop" : "selection-vector-remover",
"@id" : 65537,
"child" : 65538,
"initialAllocation" : 1000000,
"maxAllocation" : 10000000000,
"cost" : 1186767.0
}, {
"pop" : "single-merge-exchange",
"@id" : 4,
"child" : 65537,
"orderings" : [ {
"order" : "ASC",
"expr" : "`id`",
"nullDirection" : "UNSPECIFIED"
} ],
"initialAllocation" : 1000000,
"maxAllocation" : 10000000000,
"cost" : 1186767.0
}, {
"pop" : "limit",
"@id" : 3,
"child" : 4,
"first" : 0,
"last" : 10,
"initialAllocation" : 1000000,
"maxAllocation" : 10000000000,
"cost" : 1186767.0
}, {
"pop" : "selection-vector-remover",
"@id" : 2,
"child" : 3,
"initialAllocation" : 1000000,
"maxAllocation" : 10000000000,
"cost" : 1186767.0
}, {
"pop" : "project",
"@id" : 1,
"exprs" : [ {
"ref" : "`gbyt`",
"expr" : "`gbyt`"
}, {
"ref" : "`id`",
"expr" : "`id`"
}, {
"ref" : "`zeroin`",
"expr" : "`zeroin`"
} ],
"chil |
+------------+------------+
1 row selected (0.096 seconds)
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)