Hi drill devs, we have a problem with our superset -> drill connection with time range filters, as described below.
Superset sends the following to drill:
WHERE `startTime` >= '2022-02-14 00:00:00.000000'
AND `startTime` < '2022-02-21 00:00:00.000000'
ORDER BY `startTime` DESC
and i get the following error:
SYSTEM ERROR: ClassCastException:
org.apache.drill.exec.expr.holders.NullableTimeStampHolder cannot be cast to
org.apache.drill.exec.expr.holders.TimeStampHolder
Please, refer to logs for more information.
(org.apache.drill.exec.work.foreman.ForemanException) Unexpected exception
during fragment initialization:
org.apache.drill.exec.expr.holders.NullableTimeStampHolder cannot be cast to
org.apache.drill.exec.expr.holders.TimeStampHolder
org.apache.drill.exec.work.foreman.Foreman.run():305
java.util.concurrent.ThreadPoolExecutor.runWorker():1149
java.util.concurrent.ThreadPoolExecutor$Worker.run():624
java.lang.Thread.run():748
Caused By (java.lang.ClassCastException)
org.apache.drill.exec.expr.holders.NullableTimeStampHolder cannot be cast to
org.apache.drill.exec.expr.holders.TimeStampHolder
org.apache.drill.exec.expr.FilterBuilder.getValueExpressionFromConst():208
org.apache.drill.exec.expr.FilterBuilder.visitFunctionHolderExpression():240
org.apache.drill.exec.expr.FilterBuilder.visitFunctionHolderExpression():58
org.apache.drill.common.expression.FunctionHolderExpression.accept():53
org.apache.drill.exec.expr.FilterBuilder.generateNewExpressions():268
org.apache.drill.exec.expr.FilterBuilder.handleCompareFunction():278
org.apache.drill.exec.expr.FilterBuilder.visitFunctionHolderExpression():246
org.apache.drill.exec.expr.FilterBuilder.visitFunctionHolderExpression():58
org.apache.drill.common.expression.FunctionHolderExpression.accept():53
org.apache.drill.exec.expr.FilterBuilder.buildFilterPredicate():80
org.apache.drill.exec.physical.base.AbstractGroupScanWithMetadata.getFilterPredicate():317
org.apache.drill.exec.store.parquet.ParquetPushDownFilter.doOnMatch():150
org.apache.drill.exec.store.parquet.ParquetPushDownFilter$2.onMatch():103
org.apache.calcite.plan.AbstractRelOptPlanner.fireRule():319
org.apache.calcite.plan.hep.HepPlanner.applyRule():561
org.apache.calcite.plan.hep.HepPlanner.applyRules():420
org.apache.calcite.plan.hep.HepPlanner.executeInstruction():257
org.apache.calcite.plan.hep.HepInstruction$RuleInstance.execute():127
org.apache.calcite.plan.hep.HepPlanner.executeProgram():216
org.apache.calcite.plan.hep.HepPlanner.findBestExp():203
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform():419
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform():370
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.transform():353
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.convertToPrel():536
org.apache.drill.exec.planner.sql.handlers.DefaultSqlHandler.getPlan():178
org.apache.drill.exec.planner.sql.DrillSqlWorker.getQueryPlan():216
org.apache.drill.exec.planner.sql.DrillSqlWorker.convertPlan():121
org.apache.drill.exec.planner.sql.DrillSqlWorker.getPlan():87
org.apache.drill.exec.work.foreman.Foreman.runSQL():593
org.apache.drill.exec.work.foreman.Foreman.run():276
java.util.concurrent.ThreadPoolExecutor.runWorker():1149
java.util.concurrent.ThreadPoolExecutor$Worker.run():624
java.lang.Thread.run():748
When i manually resend the query with TIMESTAMP as here:
WHERE `startTime` >= TIMESTAMP '2022-02-14 00:00:00.000000'
AND `startTime` < TIMESTAMP '2022-02-21 00:00:00.000000'
ORDER BY `startTime` DESC
Everything is fine, but superset doesnt create the query this way.
So, now to my question:Is this error message legit because of the missing
"TIMESTAMP" before the timestamp string, or do we have a problem here in drill?
Regards
Christian
------- Original Message -------
Z0ltrix <[email protected]> schrieb am Mittwoch, 23. Februar 2022 um 10:49:
> Hello superset devs,
>
> we have a problem with our superset -> drill connection with time range
> filters.
>
> When we filter a dashboard by time range (last week, month, etc.) i get an
>
> SYSTEM ERROR: ClassCastException:
> org.apache.drill.exec.expr.holders.NullableTimeStampHolder cannot be cast to
> org.apache.drill.exec.expr.holders.TimeStampHolder
>
> from drill.
>
> I dont want to talk here too much about the drill error because this is a
> topic for the drill project, but i think we could solve this also by adding
> something to db_engine_specs/drill.py
>
> Superset sends the following to drill:
>
> WHERE `startTime` >= '2022-02-14 00:00:00.000000'
> AND `startTime` < '2022-02-21 00:00:00.000000'
> ORDER BY `startTime` DESC
>
> Superset should send the following filter:
> WHERE `startTime` >= TIMESTAMP '2022-02-14 00:00:00.000000'
> AND `startTime` < TIMESTAMP '2022-02-21 00:00:00.000000'
> ORDER BY `startTime` DESC
>
> My Question is, which classmethod of BaseEngineSpec must be overwritten and
> maybe you could give me a hint how i could do this.
> If im aware what to do, i can create a PR for this.
>
> Regards,
> Christian
publickey - [email protected] - 0xF0E154C5.asc
Description: application/pgp-keys
signature.asc
Description: OpenPGP digital signature
