Uploaded image for project: 'Kylin'
  1. Kylin
  2. KYLIN-4853

QueryPreparedStatementCache invalid in Spark Query Engine

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Blocker
    • Resolution: Fixed
    • None
    • v4.0.0-beta
    • None
    • None

    Description

      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:

      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)
      
      

       

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

       

      Attachments

        Issue Links

          Activity

            People

              zhengshengjun Shengjun Zheng
              zhengshengjun Shengjun Zheng
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: