You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@kylin.apache.org by "Roberto Tardío Olmos (Jira)" <ji...@apache.org> on 2020/03/01 12:01:00 UTC

[jira] [Comment Edited] (KYLIN-4011) Kyling grouping function

    [ https://issues.apache.org/jira/browse/KYLIN-4011?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17048540#comment-17048540 ] 

Roberto Tardío Olmos edited comment on KYLIN-4011 at 3/1/20 12:00 PM:
----------------------------------------------------------------------

Hi,

In my case it does not work when I introduce a join in order to use columns from dimension tables and not from fact table. I'm also using Kylin 2.6.2

For example;

The following query works well:

SELECT 
 part_dt, 
 lstg_format_name, 
 grouping(part_dt)+grouping(lstg_format_name) as lochierarchy,
 SUM(price),
 RANK() OVER(
 PARTITION BY grouping(part_dt)+grouping(lstg_format_name),
 case when grouping(lstg_format_name) = 0 then part_dt end 
 ORDER BY SUM(price) asc) AS rank_within_parent
 FROM kylin_sales 
 GROUP BY 
 grouping sets((part_dt, lstg_format_name))
 ORDER BY
 lochierarchy desc,
 case when lochierarchy = 0 then part_dt end,
 rank_within_parent ;

 

However, if I introduce just a join with any dimension table, the query returns the following error:  

*RowType=19, ColumnRowType=17* while executing SQL: "SELECT part_dt, lstg_format_name, grouping(part_dt)+grouping(lstg_format_name) as lochierarchy, SUM(price), RANK() OVER( PARTITION BY grouping(part_dt)+grouping(lstg_format_name), case when grouping(lstg_format_name) = 0 then part_dt end ORDER BY SUM(price) asc) AS rank_within_parent FROM kylin_sales JOIN KYLIN_CAL_DT on part_dt = cal_dt GROUP BY grouping sets((part_dt, lstg_format_name)) ORDER BY lochierarchy desc, case when lochierarchy = 0 then part_dt end, rank_within_parent LIMIT 50000"

The query executed (in bold the join added)

SELECT 
 part_dt, 
 lstg_format_name, 
 grouping(part_dt)+grouping(lstg_format_name) as lochierarchy,
 SUM(price),
 RANK() OVER(
 PARTITION BY grouping(part_dt)+grouping(lstg_format_name),
 case when grouping(lstg_format_name) = 0 then part_dt end 
 ORDER BY SUM(price) asc) AS rank_within_parent
 FROM kylin_sales 
 *JOIN KYLIN_CAL_DT on part_dt = cal_dt*
 GROUP BY 
 grouping sets((part_dt, lstg_format_name))
 ORDER BY
 lochierarchy desc,
 case when lochierarchy = 0 then part_dt end,
 rank_within_parent ;

 

Regards!

Roberto


was (Author: rober tardio):
Hi,

In my case it does not work when I intorduce a join in order to use columns from dimensions tables and not from fact table.

For example;

The following query works well:

SELECT 
part_dt, 
lstg_format_name, 
grouping(part_dt)+grouping(lstg_format_name) as lochierarchy,
SUM(price),
RANK() OVER(
 PARTITION BY grouping(part_dt)+grouping(lstg_format_name),
 case when grouping(lstg_format_name) = 0 then part_dt end 
 ORDER BY SUM(price) asc) AS rank_within_parent
FROM kylin_sales 
GROUP BY 
grouping sets((part_dt, lstg_format_name))
ORDER BY
lochierarchy desc,
case when lochierarchy = 0 then part_dt end,
rank_within_parent ;

 

However, if I introduce just a join with any dimension table, the query returns the following error:  

*RowType=19, ColumnRowType=17* while executing SQL: "SELECT part_dt, lstg_format_name, grouping(part_dt)+grouping(lstg_format_name) as lochierarchy, SUM(price), RANK() OVER( PARTITION BY grouping(part_dt)+grouping(lstg_format_name), case when grouping(lstg_format_name) = 0 then part_dt end ORDER BY SUM(price) asc) AS rank_within_parent FROM kylin_sales JOIN KYLIN_CAL_DT on part_dt = cal_dt GROUP BY grouping sets((part_dt, lstg_format_name)) ORDER BY lochierarchy desc, case when lochierarchy = 0 then part_dt end, rank_within_parent LIMIT 50000"

The query executed (in bold the join added)

SELECT 
part_dt, 
lstg_format_name, 
grouping(part_dt)+grouping(lstg_format_name) as lochierarchy,
SUM(price),
RANK() OVER(
 PARTITION BY grouping(part_dt)+grouping(lstg_format_name),
 case when grouping(lstg_format_name) = 0 then part_dt end 
 ORDER BY SUM(price) asc) AS rank_within_parent
FROM kylin_sales 
*JOIN KYLIN_CAL_DT on part_dt = cal_dt*
GROUP BY 
grouping sets((part_dt, lstg_format_name))
ORDER BY
lochierarchy desc,
case when lochierarchy = 0 then part_dt end,
rank_within_parent ;

 

Regards!

Roberto

> Kyling grouping function
> ------------------------
>
>                 Key: KYLIN-4011
>                 URL: https://issues.apache.org/jira/browse/KYLIN-4011
>             Project: Kylin
>          Issue Type: Bug
>          Components: Query Engine
>    Affects Versions: v2.6.2
>            Reporter: tag
>            Assignee: Yaqian Zhang
>            Priority: Major
>         Attachments: image-2019-11-05-18-04-46-639.png
>
>
> {{```}}
> {{select dim1, case grouping(dim2) when 1 then 'ALL' else dim2 end, sum(col) as metric1 from table group by grouping sets((dim1, dim2), (dim1));}}
> {{```}}
> {{`case grouping(dim2) when 2 then 'All' else dim2 end` can work  in version v2.5.2, but invalid in version v2.6.2. }}
> {{How to query aggregate by grouping sets?}}



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