如何在Hive中实现与之间的连接?

时间:2013-09-17 21:56:24

标签: sql hadoop hive

我有一个带有IP地址数字版本的Hive表。我有另一个表,其中包含开始,结束,位置,其中start和end定义了与位置关联的一系列数字IP。

Example
Numeric: 29

start | end | location
----------------------
1     | 11  | 666
12    | 30  | 777
31    | 40  | 888

Output: 29 - 777

我需要使用表1中的IP来查找表2中的位置。我是Hive的新手并且发现我不能使用BETWEEN或< >在连接语句中。我一直试图找出使用Hive SQL实现这一目标的一些方法,但无法弄明白。有办法吗?如果需要其中一个,我对UDF也有些熟悉。我很想知道这在Hive中是不可能的,我需要使用Pig或Java Map / Reduce工作,我现在还不太了解事情。

感谢任何帮助。 感谢。

1 个答案:

答案 0 :(得分:2)

Hive和Pig不支持这种不平等加入。您可以使用交叉连接以及在何处执行此操作。但它效率低下。一个简单的例子:

SELECT t1.ip, t2.location_ip FROM t1 JOIN t2
WHERE t1.ip >= t2.start_ip and t1.ip<=t2.start_ip ;

然而,似乎你想要交叉加入一个大表和一个小表。如果是这样,可能以下声明更有效:

SELECT /*+ MAPJOIN(t2) */ t1.ip, t2.location_ip FROM t1 JOIN t2
WHERE t1.ip >= t2.start_ip and t1.ip<=t2.start_ip ;