如何在 on 子句中使用自定义 udf 时模仿 hive 中的“not in”操作?
Posted
技术标签:
【中文标题】如何在 on 子句中使用自定义 udf 时模仿 hive 中的“not in”操作?【英文标题】:how to mimic 'not in' operation in hive while using custom udf in on clause? 【发布时间】:2014-06-12 03:47:41 【问题描述】:我的hql如下:
select cdo_oplog.operatorid, cdo_oplog.clientid from cdo_oplog left outer join inner_ip on StrContain(cdo_oplog.clientid, inner_ip.ip) where inner_ip.ip 为空;
如您所见,这个 hql 可以做与 mysql 中的 not in
查询相同的事情。但是当我在 hive 中发出它时,会抛出以下错误:
FAILED: Error in semantic analysis: Line 1:91 JOIN 'ip' 中遇到左右别名
当我搜索它时,我找到了a similar one,但该解决方案仅适用于in
查询,不适用于not in
。谁能给我一个替代 not in
在蜂巢中查询?非常感谢!
【问题讨论】:
【参考方案1】:Hive 不能在 join 语句的上下文中应用 StrContain(cdo_oplog.clientid, inner_ip.ip)。
但您似乎已经意识到这一点。那么,也许您想进一步解释您期望实现的目标?
【讨论】:
我打算在hive中实现not in
查询,可以在where inner_ip.ip is null
看到。
是的,我明白这一点。我过去曾回答过如何做“in”(相对于 not in)***.com/questions/20880124/…
那么在这种情况下not in
是否有替代方案,需要on
子句的udf?
不,您正在正确处理该部分。问题是 hive 中的连接在它们允许的范围内是严格/有限的。根据我的理解和经验,他们无法像您尝试那样处理 UDF。 YMMV。以上是关于如何在 on 子句中使用自定义 udf 时模仿 hive 中的“not in”操作?的主要内容,如果未能解决你的问题,请参考以下文章