Sql 如何在配置单元中使用中间连接实现连接?
我有一个配置单元表,其中包含IP地址的数字版本。我有另一个带有start、end、location的表,其中start和end定义了一系列与某个位置关联的数字IPSql 如何在配置单元中使用中间连接实现连接?,sql,hadoop,hive,Sql,Hadoop,Hive,我有一个配置单元表,其中包含IP地址的数字版本。我有另一个带有start、end、location的表,其中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的
Example
Numeric: 29
start | end | location
----------------------
1 | 11 | 666
12 | 30 | 777
31 | 40 | 888
Output: 29 - 777
我需要使用表1中的IP来查找表2中的位置。我是Hive的新手,发现我不能在join语句中使用BETHEN或<>。我一直在尝试使用配置单元SQL来找到实现这一点的方法,但没有找到。有办法吗?如果需要的话,我对UDF也有点熟悉。我愿意接受这样的想法,即这在Hive中是不可能的,我需要使用Pig或Java Map/Reduce作业,我只是在这一点上还不太了解
感谢您的帮助谢谢。蜂巢和猪不支持这种不平等加入。您可以使用交叉连接以及在何处进行交叉连接。但这是低效的。一个简单的例子:
SELECT t1.ip, t2.location_ip FROM t1 JOIN t2
WHERE t1.ip >= t2.start_ip and t1.ip<=t2.start_ip ;
从t1连接t2选择t1.ip、t2.location\u ip
其中t1.ip>=t2.start\u ip和t1.ip=t2.start\u ip和t1.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 ;