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

Rewrite should not run on OLAPAggregateRel if has no OLAPTable

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • v2.0.0
    • None
    • None

    Description

      If a OLAPAggregateRel's context does not contain any OLAPTable, it's no need to rewrite column. Otherwise a NPE will be threw, for example:

      Caused by: java.lang.NullPointerException
      	at org.apache.kylin.query.relnode.OLAPAggregateRel.buildRewriteColumn(OLAPAggregateRel.java:217)
      	at org.apache.kylin.query.relnode.OLAPAggregateRel.buildRewriteFieldsAndMetricsColumns(OLAPAggregateRel.java:340)
      	at org.apache.kylin.query.relnode.OLAPAggregateRel.implementRewrite(OLAPAggregateRel.java:259)
      	at org.apache.kylin.query.relnode.OLAPRel$RewriteImplementor.visitChild(OLAPRel.java:158)
      	at org.apache.kylin.query.relnode.OLAPSortRel.implementRewrite(OLAPSortRel.java:83)
      	at org.apache.kylin.query.relnode.OLAPRel$RewriteImplementor.visitChild(OLAPRel.java:158)
      	at org.apache.kylin.query.relnode.OLAPLimitRel.implementRewrite(OLAPLimitRel.java:105)
      	at org.apache.kylin.query.relnode.OLAPRel$RewriteImplementor.visitChild(OLAPRel.java:158)
      	at org.apache.kylin.query.relnode.OLAPToEnumerableConverter.implement(OLAPToEnumerableConverter.java:94)
      	at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:108)
      	at org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:92)
      	at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1233)
      	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:303)
      	at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:200)
      	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:761)
      	at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:617)
      	at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:587)
      	at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:215)
      	at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:594)
      	at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:615)
      	at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:148)
      	... 35 more
      

      Test case:

      SELECT
          t1.leaf_categ_id, COUNT(*) AS nums
      FROM
          (SELECT
              leaf_categ_id
          FROM
              test_kylin_fact
          WHERE
              lstg_format_name = 'ABIN') t1
              JOIN
          (SELECT
              leaf_categ_id
          FROM
              test_kylin_fact f
          INNER JOIN test_order o ON f.order_id = o.order_id
          WHERE
              buyer_id > 100) t2 ON t1.leaf_categ_id = t2.leaf_categ_id
      GROUP BY t1.leaf_categ_id
      ORDER BY t1.leaf_categ_id
      LIMIT 10
      

      Attachments

        1. KYLIN-2449.patch
          3 kB
          Kaige Liu

        Issue Links

          Activity

            People

              liukaige Kaige Liu
              liukaige Kaige Liu
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: