加入 Snowflake 中最近的几何体

问题描述 投票:0回答:1

我想根据 X、Y(长、纬度)坐标连接两个雪花表。

两个表中的每一行都是一个点,我想将表 A 中的每一行连接到表 B 中的最近点。

在Python中,GeoPandas模块有这个,它正是我需要的:geopandas.GeoDataFrame.sjoin_nearest

有没有办法在 Snowflake SQL 中做到这一点?在这种特殊情况下,我有(纬度,经度)点,但该解决方案应该理想地适用于任何几何/地理。

请注意,这与连接一定距离内的点不同,根据此answer,有半正弦函数。

snowflake-cloud-data-platform geopandas
1个回答
0
投票

这可能不是最优化的解决方案,但它有效:

select a.id, b.id, a.p, b.p, st_distance(a.p, b.p) dist
from random_points a
join random_points b
on a.id != b.id
qualify row_number() over(partition by a.id, b.id order by dist desc) = 1

我们正在进行交叉连接,并使用

qualify
只获取表
b
上与表
a
上每个点最近的点。

设置:

create or replace table random_points as 
SELECT row_number() over(order by 1) id
    , ST_POINT(
      (UNIFORM(-180::float, 180, RANDOM())), 
      (UNIFORM(-90::float, 90, RANDOM()))
    ) p
FROM TABLE(GENERATOR(ROWCOUNT => 500)); 
© www.soinside.com 2019 - 2024. All rights reserved.