(If there's a better target for an issue request, please let me know!)
While trying to understand the details Calcite rule execution, I turned on
the Calcite tracing per
https://calcite.incubator.apache.org/docs/howto.html#tracing . At that
point (running a query from the web UI) I get the error
Query Failed: An Error Occurred
org.apache.drill.common.exceptions.UserRemoteException: SYSTEM ERROR:
AssertionError: Internal error: should never get here ...
The query is pretty straightforward:
select Person, sum(Qty1) from mongo.mine.test group by Person
A simple trial with the same settings against the Apache Calcite
example/csv doesn't show the same behavior. (Calcite query: SELECT DEPTNO,
SUM(EMPNO) FROM emps GROUP BY DEPTNO ; )
In Drill, I'm querying against a Mongo db but the code path in the
exception trace doesn't immediately appear to be relevant for that. It
seems to happen the very first time dumpGraph is called.
The innermost cause (in all its glory) is due to the method:
@Override public RelOptCost computeSelfCost(RelOptPlanner planner) {
// HepRelMetadataProvider is supposed to intercept this
// and redirect to the real rels.
throw Util.newInternal("should never get here");
}
and the trace is:
cause {
exception_class: "java.lang.AssertionError"
message: "Internal error: should never get here"
stack_trace {
class_name: "org.apache.calcite.util.Util"
file_name: "Util.java"
line_number: 775
method_name: "newInternal"
is_native_method: false
}
stack_trace {
class_name: "org.apache.calcite.plan.hep.HepRelVertex"
file_name: "HepRelVertex.java"
line_number: 68
method_name: "computeSelfCost"
is_native_method: false
}
stack_trace {
class_name:
"org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows"
file_name: "RelMdPercentageOriginalRows.java"
line_number: 165
method_name: "getNonCumulativeCost"
is_native_method: false
}
stack_trace {
class_name: "..."
line_number: 0
method_name: "..."
is_native_method: false
}
stack_trace {
class_name:
"org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$2$1"
file_name: "ReflectiveRelMetadataProvider.java"
line_number: 194
method_name: "invoke"
is_native_method: false
}
stack_trace {
class_name: "..."
line_number: 0
method_name: "..."
is_native_method: false
}
stack_trace {
class_name: "org.apache.calcite.rel.metadata.RelMetadataQuery"
file_name: "RelMetadataQuery.java"
line_number: 115
method_name: "getNonCumulativeCost"
is_native_method: false
}
stack_trace {
class_name:
"org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows"
file_name: "RelMdPercentageOriginalRows.java"
line_number: 151
method_name: "getCumulativeCost"
is_native_method: false
}
stack_trace {
class_name: "..."
line_number: 0
method_name: "..."
is_native_method: false
}
stack_trace {
class_name:
"org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$2$1"
file_name: "ReflectiveRelMetadataProvider.java"
line_number: 194
method_name: "invoke"
is_native_method: false
}
stack_trace {
class_name: "..."
line_number: 0
method_name: "..."
is_native_method: false
}
stack_trace {
class_name: "org.apache.calcite.rel.metadata.RelMetadataQuery"
file_name: "RelMetadataQuery.java"
line_number: 101
method_name: "getCumulativeCost"
is_native_method: false
}
stack_trace {
class_name:
"org.apache.calcite.rel.metadata.RelMdPercentageOriginalRows"
file_name: "RelMdPercentageOriginalRows.java"
line_number: 154
method_name: "getCumulativeCost"
is_native_method: false
}
stack_trace {
class_name: "..."
line_number: 0
method_name: "..."
is_native_method: false
}
stack_trace {
class_name:
"org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider$2$1"
file_name: "ReflectiveRelMetadataProvider.java"
line_number: 194
method_name: "invoke"
is_native_method: false
}
stack_trace {
class_name: "..."
line_number: 0
method_name: "..."
is_native_method: false
}
stack_trace {
class_name: "org.apache.calcite.rel.metadata.RelMetadataQuery"
file_name: "RelMetadataQuery.java"
line_number: 101
method_name: "getCumulativeCost"
is_native_method: false
}
stack_trace {
class_name: "org.apache.calcite.plan.AbstractRelOptPlanner"
file_name: "AbstractRelOptPlanner.java"
line_number: 251
method_name: "getCost"
is_native_method: false
}
stack_trace {
class_name: "org.apache.calcite.plan.hep.HepPlanner"
file_name: "HepPlanner.java"
line_number: 962
method_name: "dumpGraph"
is_native_method: false
}
stack_trace {
class_name: "org.apache.calcite.plan.hep.HepPlanner"
file_name: "HepPlanner.java"
line_number: 151
method_name: "setRoot"
is_native_method: false
}
stack_trace {
class_name:
"org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler"
file_name: "DefaultSqlHandler.java"
line_number: 449
method_name: "convertToRel"
is_native_method: false
}
stack_trace {
class_name:
"org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler"
file_name: "DefaultSqlHandler.java"
line_number: 191
method_name: "validateAndConvert"
is_native_method: false
}
stack_trace {
class_name:
"org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler"
file_name: "DefaultSqlHandler.java"
line_number: 157
method_name: "getPlan"
is_native_method: false
}
stack_trace {
class_name: "org.apache.drill.exec.planner.sql.DrillSqlWorker"
file_name: "DrillSqlWorker.java"
line_number: 178
method_name: "getPlan"
is_native_method: false
}
stack_trace {
class_name: "org.apache.drill.exec.work.foreman.Foreman"
file_name: "Foreman.java"
line_number: 903
method_name: "runSQL"
is_native_method: false
}
stack_trace {
class_name: "org.apache.drill.exec.work.foreman.Foreman"
file_name: "Foreman.java"
line_number: 242
method_name: "run"
is_native_method: false
}
stack_trace {
class_name: "..."
line_number: 0
method_name: "..."
is_native_method: false
}
}
The mongo database is simplicity itself, for repro purposes:
{
"Date" : "4/4/2014",
"Person" : "Bob",
"Qty1" : 45,
"Qty2" : 52
}
{
"Date" : "4/12/2014",
"Person" : "Sarah",
"Qty1" : 10,
"Qty2" : 14
}
{
"Date" : "4/12/2014",
"Person" : "Bob",
"Qty1" : 72,
"Qty2" : 33
}
{
"Date" : "5/1/2014",
"Person" : "Agnes",
"Qty1" : 24,
"Qty2" : 25
}
{
"Date" : "5/2/2014",
"Person" : "Sarah",
"Qty1" : 86,
"Qty2" : 4
}
{
"Date" : "5/6/2014",
"Person" : "Bob",
"Qty1" : 17,
"Qty2" : 4
}
loaded with `mongoimport --db mine --collection test --drop --file
c:/tmp/work1a.json`
Thank you for any pointers.