Xi Chen created KYLIN-4440: ------------------------------ Summary: IllegalStateException thrown when a query contains group by clause with case when of dimensional table columns Key: KYLIN-4440 URL: https://issues.apache.org/jira/browse/KYLIN-4440 Project: Kylin Issue Type: Bug Components: Query Engine Affects Versions: v2.6.5, v2.5.1, v2.2.0 Reporter: Xi Chen
When a sub-query contains group by clause with case when of dimensional table columns, and the sub-query is joined by another sub-query, the whole query fails throwing java.lang.IllegalStateException. Example query of kylin_sales: ``` SELECT * FROM ( SELECT part_dt , CASE WHEN buyer_id >= 10003000 THEN 'A' ELSE kylin_account.account_country END AS category , sum(price) AS total_sold , count(DISTINCT seller_id) AS sellers FROM kylin_sales LEFT JOIN kylin_account ON kylin_sales.buyer_id = kylin_account.account_id GROUP BY part_dt , CASE WHEN buyer_id >= 10003000 THEN 'A' ELSE kylin_account.account_country END ORDER BY part_dt ) t1 LEFT JOIN ( SELECT part_dt , sum(price) AS total_sold , count(DISTINCT seller_id) AS sellers FROM kylin_sales LEFT JOIN kylin_account ON kylin_sales.buyer_id = kylin_account.account_id GROUP BY part_dt ORDER BY part_dt ) t2 ON t1.part_dt = t2.part_dt ORDER BY t1.part_dt DESC ``` Exception message: ``` RowType=7, ColumnRowType=8 while executing SQL: "SELECT * FROM ( SELECT part_dt , CASE WHEN buyer_id >= 10003000 THEN 'A' ELSE kylin_account.account_country END AS category , sum(price) AS total_sold , count(DISTINCT seller_id) AS sellers FROM kylin_sales LEFT JOIN kylin_account ON kylin_sales.buyer_id = kylin_account.account_id GROUP BY part_dt , CASE WHEN buyer_id >= 10003000 THEN 'A' ELSE kylin_account.account_country END ORDER BY part_dt ) t1 LEFT JOIN ( SELECT part_dt , sum(price) AS total_sold , count(DISTINCT seller_id) AS sellers FROM kylin_sales LEFT JOIN kylin_account ON kylin_sales.buyer_id = kylin_account.account_id GROUP BY part_dt ORDER BY part_dt ) t2 ON t1.part_dt = t2.part_dt ORDER BY t1.part_dt DESC LIMIT 50000" ``` More message from kylin logs: ``` Caused by: java.lang.IllegalStateException: RowType=7, ColumnRowType=8 at org.apache.kylin.query.relnode.OLAPJoinRel.buildColumnRowType(OLAPJoinRel.java:223) at org.apache.kylin.query.relnode.OLAPJoinRel.implementOLAP(OLAPJoinRel.java:174) at org.apache.kylin.query.relnode.OLAPRel$OLAPImplementor.visitChild(OLAPRel.java:84) at org.apache.kylin.query.relnode.OLAPSortRel.implementOLAP(OLAPSortRel.java:72) at org.apache.kylin.query.relnode.OLAPRel$OLAPImplementor.visitChild(OLAPRel.java:84) at org.apache.kylin.query.relnode.OLAPLimitRel.implementOLAP(OLAPLimitRel.java:77) at org.apache.kylin.query.relnode.OLAPRel$OLAPImplementor.visitChild(OLAPRel.java:84) at org.apache.kylin.query.relnode.OLAPToEnumerableConverter.implement(OLAPToEnumerableConverter.java:75) at org.apache.calcite.adapter.enumerable.EnumerableRelImplementor.implementRoot(EnumerableRelImplementor.java:103) at org.apache.calcite.adapter.enumerable.EnumerableInterpretable.toBindable(EnumerableInterpretable.java:92) at org.apache.calcite.prepare.CalcitePrepareImpl$CalcitePreparingStmt.implement(CalcitePrepareImpl.java:1278) at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:331) at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:230) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:796) at org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:655) at org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:618) at org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:221) at org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:603) at org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:638) at org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:149) ... 83 more ``` -- This message was sent by Atlassian Jira (v8.3.4#803005)