#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: любые предложения по перепроектированию недостатка в модели данных.