1

我有一个带有 IP 地址数字版本的 Hive 表。我有另一个表,其中包含开始、结束和位置,其中开始和结束定义了与位置关联的数字 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 工作,我现在对事情的了解还不够多。

任何帮助表示赞赏。谢谢。

4

1 回答 1

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 ;
于 2013-09-18T02:08:02.260 回答