Есть ли способ увеличить выделенную память для запросов в BigQuery? - PullRequest
1 голос
/ 16 мая 2019

У меня есть большая таблица (около 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 миллионов строк ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...