Обновление: теперь с официальными общедоступными наборами данных:
SELECT *
FROM (
SELECT b.zip_code neighbor, b.city, b.county, ST_DISTANCE(a.zcta_geom, b.zcta_geom) distance
FROM `bigquery-public-data.geo_us_boundaries.us_zip_codes` a,
`bigquery-public-data.geo_us_boundaries.us_zip_codes` b
WHERE a.zip_code != b.zip_code
AND a.zip_code = '94304'
)
WHERE distance < 2000 # 2 KM
ORDER BY distance
-- 5.4s elapsed, 130 MB processed
![enter image description here](https://i.stack.imgur.com/uOQcW.png)
С BigQuery GIS и доступными общедоступными данными это довольно просто и быстро:
SELECT *
FROM (
SELECT b.zipcode neighbor, b.city, b.county, ST_DISTANCE(a.geog, b.geog) distance
FROM `fh-bigquery.gis.zipcodes` a,
`fh-bigquery.gis.zipcodes` b
WHERE a.zipcode != b.zipcode
AND a.zipcode = '94304'
)
WHERE distance < 2000 # 2 KM
ORDER BY distance
-- Query complete (4.2s elapsed, 130 MB processed)
![enter image description here](https://i.stack.imgur.com/b5W35.png)
Чтобы получить это быстрое выполнение, сначала я преобразовал доступные общедоступные данные, чтобы геометрии в тексте уже были проанализированы в геометрии ГИС:
CREATE TABLE `gis.zipcodes`
AS
SELECT *, ST_GEOGFROMTEXT(zipcode_geom) AS geog
FROM `bigquery-public-data.utility_us.zipcode_area`
На основе: