hcy created KYLIN-4823:
--------------------------
Summary: Push down having filter error when group by dynamic
column
Key: KYLIN-4823
URL: https://issues.apache.org/jira/browse/KYLIN-4823
Project: Kylin
Issue Type: Bug
Components: Query Engine
Affects Versions: v3.1.0
Reporter: hcy
如果cube只有一个segment,且shard by的列存在于group by中,满足having filter push down的条件时,如果group
by中存在动态列,且case when then
中的表达是为column而不是常量时会报数据越界的错误。配置kylin.query.enable-dynamic-column=true无效,也会报错。
测试Cube如下:
模型为kylin
example中的kylin_sales_model,cube为kylin_sales_cube,为了重现错误把BUYER_ID的rowkey设置为shard
by
测试SQL如下:
SELECT BUYER_ID,
CASE WHEN LSTG_SITE_ID > 1 then LSTG_SITE_ID else LEAF_CATEG_ID END AS
dyna_group,
SUM(PRICE)
FROM KYLIN_SALES
GROUP BY
BUYER_ID,
CASE WHEN LSTG_SITE_ID > 1 then LSTG_SITE_ID else LEAF_CATEG_ID END
HAVING SUM(PRICE)>10
报错如下:
{color:#b94a48}Index: 4, Size: 1 while executing SQL: "select * from (SELECT
BUYER_ID, CASE WHEN LSTG_SITE_ID > 1 then LSTG_SITE_ID else LEAF_CATEG_ID END
AS dyna_group, SUM(PRICE) FROM KYLIN_SALES GROUP BY BUYER_ID, CASE WHEN
LSTG_SITE_ID > 1 then LSTG_SITE_ID else LEAF_CATEG_ID END HAVING SUM(PRICE)>10)
limit 50000"{color}
Caused by: java.lang.IndexOutOfBoundsException: Index: 4, Size: 1
at java.util.ArrayList.rangeCheck(ArrayList.java:657)
at java.util.ArrayList.get(ArrayList.java:433)
at
org.apache.kylin.storage.gtrecord.GTCubeStorageQueryBase.checkHavingCanPushDown(GTCubeStorageQueryBase.java:552)
at
org.apache.kylin.storage.gtrecord.GTCubeStorageQueryBase.getStorageQueryRequest(GTCubeStorageQueryBase.java:189)
at
org.apache.kylin.storage.gtrecord.GTCubeStorageQueryBase.search(GTCubeStorageQueryBase.java:89)
at
org.apache.kylin.query.enumerator.OLAPEnumerator.queryStorage(OLAPEnumerator.java:117)
at
org.apache.kylin.query.enumerator.OLAPEnumerator.moveNext(OLAPEnumerator.java:60)
--
This message was sent by Atlassian Jira
(v8.3.4#803005)