Я пытаюсь запустить запрос в BigQuery, но получаю «Ресурсы, превышаемые во время выполнения запроса».Оптимизировать запрос в BigQuery
На самом деле, у меня есть две таблицы:
Table user:
Id | User | Latitude | Longitude
1 | 1 | 50.83 | 4.01
2 | 1 | 50.84 | 4.03
3 | 2 | 48.78 | 2.87
4 | 3 | 47.42 | 8.53
…
Table point_of_interest:
Id | Latitude | Longitude | Range | Tag
1 | 50.81 | 3.98 | 0.05 | a;b;c;d
2 | 50.85 | 4.03 | 0.025 | a;c;e;f
3 | 40.80 | 3.87 | 0.04 | a;d;g
4 | 47.42 | 8.57 | 0.08 | b
…
Цель состоит в том, чтобы соединить таблицы, чтобы пометить все пользовательские с широтой, долготой и Range.
Для этого я использовал этот запрос:
SELECT
u.User AS id,
GROUP_CONCAT(poi.Tag) AS tag
FROM (
SELECT
u.User,
poi.Tag,
FROM
[user] u
CROSS JOIN
[point_of_interest] poi
WHERE
u.Latitude BETWEEN poi.Latitude – poi.Range AND poi.Latitude + poi.Range
AND
u.Longitude BETWEEN poi.Longitude – poi.Range AND poi.Longitude + poi.Range)
GROUP BY
id
В таблице пользователя в настоящее время 520 MB и таблица point_of_interest только 565 КБ, но, вероятно, расти в то время.
Я хочу знать, есть ли лучший способ выполнить эту цель, и лучшая архитектура для этого.
EDIT:
Я также попытался использовать диапазон LEFT JOIN EACH
однако BigQuery поддерживают только операторы равенства после ON
ключевого слова.
Не размер, но количество записей важно. Каково количество записей в каждой таблице? – Pentium10
Вы пытались «GROUP EACH BY», вы все еще получаете Ресурсы? – Pentium10
Я попробовал GROUP EACH BY и получил ту же ошибку. Таблица пользователей содержит 3 000 000 записей и таблицу point_of_interest 100 000. – Nexus