【发布时间】:2020-10-21 01:48:12
【问题描述】:
我正在尝试在 BigQuery 中优化以下查询。
Table1 has ~400K rows
Table2 has 34M rows
我必须将 Table1 中的每个 ID 映射到 Table2 中最接近的 Zipcode。
Table1和Table2都有经纬度数据
WITH
tmp1 AS (
SELECT
ID, latitude, longitude
FROM `Table1`),
tmp2 AS (
SELECT
CAST(ZipCode AS string) AS ZipCode ,lat,lon
FROM `Table2` )
SELECT
AS VALUE ARRAY_AGG(STRUCT<ID STRING,ZipCode STRING, distance int64>(ID,
ZipCode,
CAST(ST_DISTANCE(tmp1.point,
tmp2.point) AS int64))
ORDER BY
ST_DISTANCE(tmp1.point,
tmp2.point)
LIMIT
1)[
OFFSET
(0)]
FROM
(
SELECT
ID,ST_GEOGPOINT(longitude,latitude) point
FROM tmp1) tmp1
CROSS JOIN (
SELECT
ZipCode, ST_GEOGPOINT(lon, lat) point
FROM tmp2) tmp2
将不胜感激任何帮助!
【问题讨论】:
-
您对已有的查询有任何疑问吗?
-
这需要很多时间。查询运行了 30 多分钟,但仍然没有输出。我猜是因为它在 Table2 中交叉连接了所有 400k 记录和 34M 行。我正在尝试通过添加约束来查看是否有更快的方法。
标签: google-bigquery distance geo