Jun Di created HIVE-25861:
-----------------------------

             Summary: 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
         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)

Reply via email to