在 Snowflake 中连接最近的几何图形

Join on nearest geometry in Snowflake

提问人:ffi23 提问时间:9/11/2023 更新时间:9/12/2023 访问量:78

问:

我想根据两个 Snowflake 表的 X,Y(经度,纬度)坐标连接它们。

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

在 Python 中,GeoPandas 模块具有此功能,它完全符合我的需求:geopandas。GeoDataFrame.sjoin_nearest

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

请注意,这与在一定距离内的点上连接不同,根据此答案,该点具有半正弦函数。

Snowflake-云-数据-平台 Geopandas

评论


答:

1赞 Felipe Hoffa 9/12/2023 #1

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

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

我们正在做一个交叉连接,并用于只获取表上最接近表上每个点的点。qualifyba

设置:

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));