【发布时间】:2021-11-26 16:12:51
【问题描述】:
我有以下两个查询:
WITH
T AS(
SELECT
ROW_NUMBER() OVER() AS uid,
position_geom
FROM
`bigquery-public-data.catalonian_mobile_coverage.mobile_data_2015_2017`
WHERE
date > "2017-12-26" )
SELECT
T1.uid,
T2.uid,
ST_DISTANCE(T1.position_geom, T2.position_geom) distance
FROM
T AS T1,
T AS T2
WHERE
T1.uid <> T2.uid QUALIFY ROW_NUMBER() OVER (PARTITION BY T1.uid ORDER BY ST_DISTANCE(T1.position_geom, T2.position_geom)) < 101
ORDER BY
T1.uid,
ST_DISTANCE(T1.position_geom, T2.position_geom)
与
WITH
T AS(
SELECT
ROW_NUMBER() OVER() AS uid,
position_geom
FROM
`bigquery-public-data.catalonian_mobile_coverage.mobile_data_2015_2017`
WHERE
date > "2017-12-26" ),
T2 AS(
SELECT
T1.position_geom pointA,
T1.uid uidA,
T2.position_geom pointB,
T2.uid uidB,
ST_DISTANCE(T1.position_geom, T2.position_geom) distance
FROM
T AS T1,
T AS T2 )
SELECT
uidA,
uidB,
distance
FROM
T2
WHERE
uidA <> uidB QUALIFY ROW_NUMBER() OVER (PARTITION BY uidA ORDER BY distance) < 101
ORDER BY
uidA,
distance
两个查询都给出了相同的结果,但第二个查询的速度几乎快了两倍(就经过的时间和消耗的槽时间而言)。为什么 bigquery 没有对第一个查询进行内部优化?
【问题讨论】:
标签: sql google-bigquery