У меня есть большая таблица (около 59 миллионов строк, 7,1 ГБ), уже упорядоченная так, как я хочу, и я хочу запросить эту таблицу и получить row_number () для каждой строки таблицы.
К сожалению я получаю ошибку
«Ресурсы превышены во время выполнения запроса: невозможно выполнить запрос в выделенной памяти.»
Есть ли способ увеличить выделенную память в BigQuery?
Вот мой запрос, я не понимаю, как я могу упростить его, но если у вас есть какие-либо советы, я приму его
SELECT
row_number() over() as rowNumber,
game,
app_version,
event_date,
user_pseudo_id,
event_name,
event_timestamp,
country,
platform
FROM
`mediation_time_BASE`
Вот полное сообщение об ошибке:
Ресурсы превышены во время выполнения запроса: запрос не может быть выполнен в выделенной памяти. Пиковое использование: 146% от лимита. Главный потребитель (и) памяти: аналитические предложения OVER (): 98%, другие / нераспределенные: 2%
Изменить:
запрос здесь представляет собой список начала и конца события, и мне нужно связать событие начала с его концом, поэтому я следую этому совету: https://www.interfacett.com/blogs/how-to-use-values-from-previous-or-next-rows-in-a-query-in-sql-server/
Для этого мне нужно иметь строки с row_number (), чтобы разделить этот подзапрос на 2 (начало события в одной руке и конец события в другой), соединить их и затем иметь по одной строке на событие с началом и концом событие, как следует (где подзапрос представляет запрос с row_number ()):
SELECT
(case when lead(inter.rowNumber) OVER(ORDER BY inter.rowNumber) - inter.rownumber =1
then lead(inter.rowNumber) OVER(ORDER BY inter.rowNumber)
else inter.rownumber end) as rowNumber,
min(inter_success.rowNumber) as rowNumber_success,
inter.game,
inter.app_version,
inter.event_date,
inter.user_pseudo_id,
inter.event_timestamp as event_start,
min(inter_success.event_timestamp) as event_end,
inter_success.event_name as results
FROM
(SELECT * FROM `subquery` where event_name = 'interstitial_fetch') as inter INNER JOIN
(SELECT * FROM `subquery` where event_name = 'interstitial_fetch_success') as inter_success
ON inter.rowNumber < inter_success.rowNumber and inter.game= inter_success.game and inter.app_version = inter_success.app_version and inter.user_pseudo_id = inter_success.user_pseudo_id
GROUP BY inter.rowNumber,inter.game,inter.app_version,inter.event_date,inter.user_pseudo_id,inter.event_timestamp,inter_success.event_name
Это прекрасно работает с меньшим набором данных, но не для 59 миллионов строк ...