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

vwoqyblh  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(440)

我是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
...

我需要找出彼此之间一定距离内的所有城市,用纬度和经度来衡量距离。
我目前对如何解决这个问题的看法如下:
如果有n=10个城市(因此表中有n=10行),则创建一个新表,其中(10*9)/2=45行,每行现在有6列(city1、city2、lat1、lat2、long1、long2)
对于这种格式的行,我可以简单地使用类似毕达哥拉斯的计算来计算距离。
我不知道如何在sql中执行步骤1。基本上,它从第一列开始创建每一个可能唯一的成对组合,并包括该行成对中每个城市对应的lat和long。
这种方法明智吗?我该如何实现呢?有更好的办法吗?
谢谢!!

vlf7wbxs

vlf7wbxs1#

你可以用一个简单的方法来完成这个任务 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

编辑:由于配置单元在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

相关问题