我看一下Hive语言手册并认识到配置单元查询不支持in/exist运算符,他们建议使用左半联接作为替换。你知道为什么吗?
laximzn51#
fwiw,Hive似乎支持在运营商: A IN (val1, val2, ...) TRUE if A is equal to any of the values. https://cwiki.apache.org/confluence/display/hive/languagemanual+udf
A IN (val1, val2, ...) TRUE if A is equal to any of the values.
qxgroojn2#
配置单元支持in/exist运算符,但不支持具有in的子查询 in .作为替代,可以使用左半连接。在Hive里是不可能的
in
SELECT a.key, a.value FROM a WHERE a.key in (SELECT b.key FROM B);
上面的内容可以用左半连接重写。
SELECT a.key, a.val FROM a LEFT SEMI JOIN b on (a.key = b.key)
看看这个
nlejzf6q3#
这让我想起了eric lippert提出的问题:“为什么c没有javafeaturex?”人们不会从另一个开始构建一种语言,然后删除一些东西,而是从零开始,然后决定实现什么特性。在某种程度上,配置单元既不支持in\exists子查询,也不支持左半联接。然后,有人建议添加左半连接。既然已经在语言中实现了,那么就不需要实现in\exists子查询了,因为这两个子查询在语义上是等价的。
3条答案
按热度按时间laximzn51#
fwiw,Hive似乎支持在运营商:
A IN (val1, val2, ...) TRUE if A is equal to any of the values.
https://cwiki.apache.org/confluence/display/hive/languagemanual+udfqxgroojn2#
配置单元支持in/exist运算符,但不支持具有in的子查询
in
.作为替代,可以使用左半连接。
在Hive里是不可能的
上面的内容可以用左半连接重写。
看看这个
nlejzf6q3#
这让我想起了eric lippert提出的问题:“为什么c没有javafeaturex?”人们不会从另一个开始构建一种语言,然后删除一些东西,而是从零开始,然后决定实现什么特性。
在某种程度上,配置单元既不支持in\exists子查询,也不支持左半联接。然后,有人建议添加左半连接。既然已经在语言中实现了,那么就不需要实现in\exists子查询了,因为这两个子查询在语义上是等价的。