在' on'中使用case语句进行条件连接HiveQL中的子句

时间:2017-05-25 17:29:02

标签: join hiveql hue case-statement

让我们说:要加入​​的 tbl_A 列中的值有不同的长度:5和10。 要加入的 tbl_B 列中的值较长,并且应根据tble_A中值的长度应用加入substr()。 所以我试图在' 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

我找不到太多关于此的信息。非常感谢您的帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

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