Условное присоединение с использованием оператора case в предложении on в HiveQL

Допустим: значения в столбце tbl_A для соединения имеют разную длину: 5 и 10. Значения в столбце tbl_B для соединения имеют большую длину и когда объединение substr() должно применяться в зависимости от длины значений в tble_A. Итак, я пытался применить оператор case в предложении ON при присоединении к таблицам с помощью HiveQL, и я получаю следующую ошибку:

Ошибка при компиляции инструкции: FAILED: SemanticException [Ошибка 10017]: Строка 22:3 И левый, и правый псевдонимы встречаются в JOIN '11'

Вот мой код:

select  
a.fullname, b.birthdate
from mydb.tbl_A a
left join mydb.tbl_B b
on a.fullname = 
   case when length(a.fullname) = 5 then substr(b.othername,1,5)
   when length(a.fullname)= 9 then substr(b.othername, 8, 9) end
and a.birthdate = b.birthdate

Я не мог найти много информации об этом. Ваша помощь будет высоко оценена. Спасибо.


person Lilu    schedule 25.05.2017    source источник


Ответы (1)


JOIN в настоящее время имеет некоторые ограничения.
Вот обходной путь.

select  a.fullname
       ,b.birthdate

from                tbl_A a

        left join   tbl_B b

        on          a.fullname  = 
                    substr(b.othername,1,5)

                and a.birthdate = 
                    b.birthdate

where   length(a.fullname) <> 9
     or a.fullname is null

union all

select  a.fullname
       ,b.birthdate

from                tbl_A a

        left join   tbl_B b

        on          a.fullname  = 
                    substr(b.othername,8,9)

                and a.birthdate = 
                    b.birthdate

where   length(a.fullname) = 9
person David דודו Markovitz    schedule 25.05.2017