медлительность 600 операторов с несколькими обращениями в hive sql

#sql #hadoop #hive #hdp

#sql #hadoop #улей #hdp

Вопрос:

У меня более 600 операторов обращения в нескольких столбцах в моем hive sql.

 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
  

пожалуйста, помогите мне с альтернативным подходом для замены нескольких операторов case в hive

Примечание: я пробовал с UNION ALL, но, похоже, это влияет на производительность.

Комментарии:

1. Столбцы с такими именами, как id_NN предполагают проблему с моделью данных. Это может быть основной причиной проблемы с производительностью.

2. большое спасибо @GordonLinoff . есть ли какой-либо альтернативный способ решения этой проблемы вместо case, любая помощь будет высоко оценена.

3. @satyha . , , я не могу придумать ничего, что сократило бы время обработки.

4. @sathya Мне нужны некоторые наполнители для X и Y. Кроме того, похоже, что вы создали 600 столбцов из столбца JSON или text в B. Возможное решение для вас: если ответ B. имеет значение только тогда, когда вы можете выполнить поиск строки в ответе B.вместо его расширения.

5. @GordonLinoff: любые предложения по перепроектированию недостатка в модели данных.