SQL:在Google BigQuery上查找最近的Lat/Lon记录

SQL:在Google BigQuery上查找最近的Lat/Lon记录,sql,google-bigquery,gis,Sql,Google Bigquery,Gis,我在Google BigQuery上有一个位置数据表,称之为table_a 这是表A的外观: ID,Lat,Lon 1,32.95,65.567 2,33.95,65.566 第二个表包含不同的项,称之为table_B。table_B与table_a具有相同的架构。这是table_B中的一个示例: ID,Lat,Lon a,32.96,65.566 b,33.96,65.566 我想创建一个新的表格,表格C,其中每一行都有表格a和表格B中的项目,这些项目是最近的,也就是说,lat/lon对之

我在Google BigQuery上有一个位置数据表,称之为table_a

这是表A的外观:

ID,Lat,Lon
1,32.95,65.567
2,33.95,65.566
第二个表包含不同的项,称之为table_B。table_B与table_a具有相同的架构。这是table_B中的一个示例:

ID,Lat,Lon
a,32.96,65.566
b,33.96,65.566
我想创建一个新的表格,表格C,其中每一行都有表格a和表格B中的项目,这些项目是最近的,也就是说,lat/lon对之间的距离是连接表格时的最小距离。这是具有上述样本数据的表C示例:

ID_A,ID_B
1,a
2,b

我的实际数据是一个属性表,一方面是lat/lon对,另一方面是bigquery-public-data.noaa_gsod.stations,我正在寻找每个属性最近的气象站

下面是BigQuery标准SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(STRUCT<id_a INT64, id_b STRING>(a.id, b.id) ORDER BY ST_DISTANCE(a.point, b.point) LIMIT 1)[OFFSET(0)] 
FROM (SELECT id, ST_GEOGPOINT(lon, lat) point FROM `project.dataset.table_a`) a
CROSS JOIN (SELECT id, ST_GEOGPOINT(lon, lat) point FROM `project.dataset.table_b`) b 
GROUP BY a.id

下面是BigQuery标准SQL

#standardSQL
SELECT AS VALUE ARRAY_AGG(STRUCT<id_a INT64, id_b STRING>(a.id, b.id) ORDER BY ST_DISTANCE(a.point, b.point) LIMIT 1)[OFFSET(0)] 
FROM (SELECT id, ST_GEOGPOINT(lon, lat) point FROM `project.dataset.table_a`) a
CROSS JOIN (SELECT id, ST_GEOGPOINT(lon, lat) point FROM `project.dataset.table_b`) b 
GROUP BY a.id

这不是那个问题的重复-这有助于计算同一张桌子上两点之间的距离,它对求最小值没有任何作用…还可以检查这个类似的问题:这不是那个问题的重复-这有助于计算同一张桌子上两点之间的距离,它无法找到最小值……也可以查看类似的问题:
Row id_a    id_b     
1   1       a    
2   2       b