You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hive.apache.org by "Jun Di (Jira)" <ji...@apache.org> on 2022/01/12 06:36:00 UTC

[jira] [Work started] (HIVE-25861) When ConstantPropagate optimizer optimizes case when equals case when twice, got wrong logical execution plan

     [ https://issues.apache.org/jira/browse/HIVE-25861?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Work on HIVE-25861 started by Jun Di.
-------------------------------------
> When ConstantPropagate optimizer optimizes case when equals case when twice, got wrong logical execution plan
> -------------------------------------------------------------------------------------------------------------
>
>                 Key: HIVE-25861
>                 URL: https://issues.apache.org/jira/browse/HIVE-25861
>             Project: Hive
>          Issue Type: Bug
>          Components: Logical Optimizer
>            Reporter: Jun Di
>            Assignee: Jun Di
>            Priority: Critical
>         Attachments: 1.png
>
>
> when run the following sql:
> {code:sql}
> select
>     t1.column_1,
>     t2.column_1,
>     t1.column_2,
>     t1.column_3,
>     case 
>         when (
>             case 
>                 when t1.column_1 in (310000, 320000, 330000, 340000) 
>                 then 310000
>                 else t1.column_1
>             end
>         ) = (
>             case
>                 when t2.column_1 in (310000, 320000, 330000, 340000) 
>                 then 310000
>                 else t2.column_1
>             end
>         )
>         then t1.column_2
>         else t1.column_3
>     end as result
> from
>     dim.dim_xmf_center t1
>     left join dim.dim_xmf_center t2
> where
>     t1.mt = '202201';
> {code}
> t1.column_1 is 440000 and t2.column_1 is 440000 but the result is t1.column_3
> Please see picture 1.png in the attachment for the result
> I found that the case when part of the execution plan is wrong:
> {code:sql}
> CASE WHEN (CASE WHEN ((_col20) IN (310000, 320000, 330000, 340000)) THEN (CASE WHEN ((_col46) IN (310000, 320000, 330000, 340000)) THEN ((true = _col20)) ELSE (((_col46 = 310000) = _col20)) END) ELSE (CASE WHEN ((_col46) IN (310000, 320000, 330000, 340000)) THEN ((true = _col20)) ELSE (((_col46 = 310000) = _col20)) END) END) THEN (_col12) ELSE (_col15) END
> {code}



--
This message was sent by Atlassian Jira
(v8.20.1#820001)