У меня есть запрос, в котором я пытаюсь получить количество элементов в таблице2 с помощью таблицы1.Следующее является упрощением этого.Большую часть времени он работал нормально, но иногда бывают дни, когда данные структурированы таким образом, что этот SQL-код начинает вызывать ошибки, связанные с ограничением памяти.Я пытался отладить его с помощью планировщика запросов.Это говорит о том, что у него заканчиваются ресурсы на этапе агрегирования, но, глядя на информацию о планировщике, я все еще не могу понять, почему у него не хватает памяти.Можно ли переписать этот запрос другим способом, чтобы он занимал меньше памяти?Вот сценарий сбоя планировщика запросов image ![enter image description here](https://i.stack.imgur.com/p0oeo.png)
-- create table
create table actions1(
start_date datetime --goes back 1 year
, end_date datetime
, action varchar(200)
, idA int64
, idB int64
);
create table actions2(
action2_date datetime
, action varchar(300)
, idA int64
, idB int64
);
-- the query
WITH filter_actions_helper AS (
SELECT
a1.action, a1.start_date, a2.start_date
, ARRAY_AGG(action2_date IGNORE NULL) action2col
FROM
actions1 a1
LEFT JOIN
actions2 a2
using(idA, idB)
GROUP BY
idA, idB
)
, filter_actions AS (
SELECT
idA, idB, start_date, end_date
, sum( if(exists( SELECT * FROM UNNEST(action2col) a WHERE a >= start_date), 1,0) ) engaged
FROM
filter_actions_helper f
GROUP BY
idA, idB
)
select * from filter_actions;