首页 > 解决方案 > hive sql中的600多个案例语句缓慢

问题描述

我的 hive sql 中的多个列上有 600 多个 case 语句。

case when A.column1 = 'Y' then case when B.id_1 = 'XY' and B.response_1 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when  B.id_2 = 'XY' and B.response_2 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_3 = 'XY' and B.response_3 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_4 = 'XY' and B.response_4 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_5 = 'XY' and B.response_5 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_6 = 'XY' and B.response_6 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_7 = 'XY' and B.response_7 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_8 = 'XY' and B.response_8 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_9 = 'XY' and B.response_9 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_10 = 'XY' and B.response_10 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_11 = 'XY' and B.response_11 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_12 = 'XY' and B.response_12 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_13 = 'XY' and B.response_13 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_14 = 'XY' and B.response_14 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_15 = 'XY' and B.response_15 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_16 = 'XY' and B.response_16 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_17 = 'XY' and B.response_17 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_18 = 'XY' and B.response_18 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_19 = 'XY' and B.response_19 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_20 = 'XY' and B.response_20 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
when A.column1 = 'Y' then case when B.id_21 = 'XY' and B.response_21 = 'Y' then concat(C.data,'S','S') else concat(C.data,'S','U') end 
else concat('CGT',C.data) end as final_type

请帮助我使用替代方法来替换 hive 中的多个 case 语句

注意:我曾尝试使用 UNION ALL,但似乎它会影响性能。

标签: sqlhadoophivehdp

解决方案


推荐阅读