提问人:ffi23 提问时间:9/11/2023 更新时间:9/12/2023 访问量:78
在 Snowflake 中连接最近的几何图形
Join on nearest geometry in Snowflake
问:
我想根据两个 Snowflake 表的 X,Y(经度,纬度)坐标连接它们。
两个表中的每一行都是一个点,我想将表A中的每一行连接到表B中最近的点。
在 Python 中,GeoPandas 模块具有此功能,它完全符合我的需求:geopandas。GeoDataFrame.sjoin_nearest
有没有办法在 Snowflake SQL 中做到这一点?在这种特殊情况下,我有(纬度,经度)点,但理想情况下,该解决方案应该适用于任何几何/地理。
请注意,这与在一定距离内的点上连接不同,根据此答案,该点具有半正弦函数。
答:
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
我们正在做一个交叉连接,并用于只获取表上最接近表上每个点的点。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));
评论