如何在 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”操作?的主要内容,如果未能解决你的问题,请参考以下文章

Hive 如何实现自定义函数 UDF

Hive 如何实现自定义函数 UDF

如何从 UDF 参数提供 SELECT 语句的 FROM 子句

描述 hive 自定义 UDF 文档

在 UDF from 子句中使用参数

如何在用户定义的函数中使用自定义类型?