You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@kylin.apache.org by "ShengJun Zheng (Jira)" <ji...@apache.org> on 2020/12/31 10:39:00 UTC

[jira] [Created] (KYLIN-4853) QueryPreparedStatementCache invalid in Spark Query Engine

ShengJun Zheng created KYLIN-4853:
-------------------------------------

             Summary: QueryPreparedStatementCache invalid in Spark Query Engine
                 Key: KYLIN-4853
                 URL: https://issues.apache.org/jira/browse/KYLIN-4853
             Project: Kylin
          Issue Type: Bug
            Reporter: ShengJun Zheng


Prepare statement cache  imported from  KYLIN-3434 get invalid in SparkQuery Engine.

In SparkQuery Engine, physical plan will be created directly from RelNode, which was not cached, it will cause  prepared statment query fail after first successful query.

Error Stack like this:
{code:java}
ava.sql.SQLException: exception while executing query: java.lang.NullPointerException
        at org.apache.calcite.avatica.Helper.createException(Helper.java:56)
        at org.apache.calcite.avatica.Helper.createException(Helper.java:41)
        at org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:577)
        at org.apache.calcite.avatica.AvaticaPreparedStatement.executeQuery(AvaticaPreparedStatement.java:137)
        at org.apache.kylin.rest.service.QueryService.executePrepareRequest(QueryService.java:1032)
        at org.apache.kylin.rest.service.QueryService.queryWithSqlMassage(QueryService.java:718)
Caused by: java.lang.RuntimeException: java.lang.NullPointerException
        at org.apache.kylin.query.exec.SparkExec.collectToEnumerable(SparkExec.java:46)
        at Baz.bind(Unknown Source)
        at org.apache.calcite.jdbc.CalcitePrepare$CalciteSignature.enumerable(CalcitePrepare.java:365)
        at org.apache.calcite.jdbc.CalciteConnectionImpl.enumerable(CalciteConnectionImpl.java:301)
        at org.apache.calcite.jdbc.CalciteMetaImpl._createIterable(CalciteMetaImpl.java:559)
        at org.apache.calcite.jdbc.CalciteMetaImpl.createIterable(CalciteMetaImpl.java:550)
        at org.apache.calcite.avatica.AvaticaResultSet.execute(AvaticaResultSet.java:182)
        at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:67)
        at org.apache.calcite.jdbc.CalciteResultSet.execute(CalciteResultSet.java:44)
        at org.apache.calcite.avatica.AvaticaConnection.executeQueryInternal(AvaticaConnection.java:573)
        ... 84 more
Caused by: java.lang.NullPointerException
        at org.apache.kylin.query.runtime.CalciteToSparkPlaner.visit(CalciteToSparkPlaner.scala:45)
        at org.apache.calcite.rel.RelVisitor.go(RelVisitor.java:61)
        at org.apache.kylin.query.runtime.SparkEngine.toSparkPlan(SparkEngine.java:61)
        at org.apache.kylin.query.runtime.SparkEngine.compute(SparkEngine.java:49)
        at org.apache.kylin.query.exec.QueryEngineFactory.compute(QueryEngineFactory.java:47)
        at org.apache.kylin.query.exec.SparkExec.collectToEnumerable(SparkExec.java:43)

{code}
 

I  solved this by cache RelNode to avoid SQL be parsed, optimized, code gen again. wonder if there is better way. thanks ~

 



--
This message was sent by Atlassian Jira
(v8.3.4#803005)