我是SQL的初学者,并且有一个问题涉及在Hive中运行查询,我认为这与SQL代码非常相似/相同。我的数据表如下所示:
name lat long
NY 40.3 70.3
SF 36.1 60.2
LA 36.5 53.1
CH 45.2 62.3
...
我需要找到距离彼此一定距离的所有城市,距离通过latitutde和经度来衡量。
我目前关于如何解决这个问题的想法如下:
我不确定如何在SQL中执行第1步。从本质上讲,它创建了第一列中每对可能唯一的对组合,并包括该行对中每个城市的相应纬度和长度。
这种做法是否聪明?我怎么能实现它?有更好的方法吗?
谢谢!
答案 0 :(得分:3)
您可以使用self-join
完成此任务。
select
d1.name as city1, d2.name as city2,
d1.lat as lat1, d2.lat as lat2,
d1.long as long1, d2.long as long2
from datatable d1
join datatable d2 on d1.name < d2.name
编辑:由于Hive不支持2.2.0以下版本中的不等连接,您可以使用
select
d1.name as city1, d2.name as city2,
d1.lat as lat1, d2.lat as lat2,
d1.long as long1, d2.long as long2
from datatable d1
join datatable d2 on 1=1
where d1.name < d2.name