SQL - 查找两个城市之间的距离,必须格式化表格

时间:2017-02-05 21:25:41

标签: sql hive

我是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和经度来衡量。

我目前关于如何解决这个问题的想法如下:

  1. 如果有n = 10个城市(因此表中n = 10行),创建一个新的表(10 * 9)/ 2 = 45行,其中每行现在有6列(city1,city2,lat1 ,lat2,long1,long2)
  2. 对于这种格式的行,我可以简单地使用类似毕达哥拉斯的计算来计算距离。
  3. 我不确定如何在SQL中执行第1步。从本质上讲,它创建了第一列中每对可能唯一的对组合,并包括该行对中每个城市的相应纬度和长度。

    这种做法是否聪明?我怎么能实现它?有更好的方法吗?

    谢谢!

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