为什么配置单元查询不支持in/exist操作符?

ldioqlga  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(372)

我看一下Hive语言手册
并认识到配置单元查询不支持in/exist运算符,他们建议使用左半联接作为替换。你知道为什么吗?

laximzn5

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

qxgroojn

qxgroojn2#

配置单元支持in/exist运算符,但不支持具有in的子查询 in .
作为替代,可以使用左半连接。
在Hive里是不可能的

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)

看看这个

nlejzf6q

nlejzf6q3#

这让我想起了eric lippert提出的问题:“为什么c没有javafeaturex?”人们不会从另一个开始构建一种语言,然后删除一些东西,而是从零开始,然后决定实现什么特性。
在某种程度上,配置单元既不支持in\exists子查询,也不支持左半联接。然后,有人建议添加左半连接。既然已经在语言中实现了,那么就不需要实现in\exists子查询了,因为这两个子查询在语义上是等价的。

相关问题