在 HiveQL 的“on”子句中使用 case 语句进行条件连接
Posted
技术标签:
【中文标题】在 HiveQL 的“on”子句中使用 case 语句进行条件连接【英文标题】:Conditional join using case statement in 'on' clause in HiveQL 【发布时间】:2017-05-25 17:29:02 【问题描述】:假设:要加入的 tbl_A 列中的值具有不同的长度:5 和 10。
要加入的tbl_B列中的值较大,加入substr()
时应根据tble_A中值的长度应用。
因此,在使用 HiveQL 加入表时,我试图在“ON”子句中应用 case 语句,但出现以下错误:
编译语句时出错:FAILED: SemanticException [Error 10017]: Line 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】: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
【讨论】:
以上是关于在 HiveQL 的“on”子句中使用 case 语句进行条件连接的主要内容,如果未能解决你的问题,请参考以下文章