[
https://issues.apache.org/jira/browse/HIVE-25861?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Alessandro Solimando resolved HIVE-25861.
-----------------------------------------
Resolution: Duplicate
> 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
> Labels: pull-request-available
> Attachments: 1.png, 2.png
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> 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)