With Google BigQuery, I'm running a query with a group by and receive the error, "Resources exceeded during query execution The query could not be executed in the allotted memory. Peak usage: 152% of limit. Top memory consumer(s): sort operations used for analytic OVER() clauses: 99% other/unattributed: 1%".
I am using this query -
SELECT
CASE
WHEN (sourceId = 1 AND web_id IS NOT NULL) THEN LAST_VALUE(Name IGNORE NULLS) OVER (PARTITION BY dgId, web_id ORDER BY event_timestamp ASC)
WHEN (sourceId IN (2,
4)
AND zc IS NOT NULL) THEN coalesce(LAST_VALUE(Name IGNORE NULLS) OVER (PARTITION BY dgId, zc ORDER BY event_timestamp ASC),
FIRST_VALUE(Name IGNORE NULLS) OVER (PARTITION BY dgId, zc ORDER BY event_timestamp ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING))
ELSE
Name
END
AS Name,
session_id,
CASE
WHEN (sourceId = 1 AND web_id IS NOT NULL) THEN LAST_VALUE(user_id IGNORE NULLS) OVER (PARTITION BY dgId, web_id ORDER BY event_timestamp ASC)
WHEN (sourceId IN (2,
4)
AND zc IS NOT NULL) THEN coalesce(LAST_VALUE(user_id IGNORE NULLS) OVER (PARTITION BY dgId, zc ORDER BY event_timestamp ASC),
FIRST_VALUE(user_id IGNORE NULLS) OVER (PARTITION BY dgId, zc ORDER BY event_timestamp ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING))
ELSE
user_id
END
AS user_id
FROM (
SELECT
CASE
WHEN (sourceId = 1 AND web_id IS NOT NULL) THEN FIRST_VALUE(consent_resolved IGNORE NULLS) OVER (PARTITION BY dgId, web_id ORDER BY event_timestamp ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)WHEN (sourceId IN (2, 4) AND zc IS NOT NULL) THEN FIRST_VALUE(consent_resolved IGNORE NULLS) OVER (PARTITION BY dgId, zc ORDER BY event_timestamp ASC ROWS BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING)
ELSE
consent_resolved
END
AS consent_resolved,
* EXCEPT(consent_resolved)
FROM (
SELECT
CASE
WHEN (LOWER(consent) ='no') THEN consent
ELSE
NULL
END
AS consent_resolved,
*
FROM
`table_name` ))
WHERE
consent_resolved IS NULL;
Any suggestions how do I resolve this? There are 50 million rows in my Big Query table.