As a matter of interest, if you test directly against Drill with the following timestamp literal expressions, what happens?

SELECT *
FROM dfs.foo.bar
WHERE `startTime` >= timestamp '2022-02-14 00:00:00.000000'
  AND `startTime` < timestamp '2022-02-21 00:00:00.000000'
ORDER BY `startTime` DESC


On 2022/02/23 11:56, Z0ltrix wrote:
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


Reply via email to