Запрос BigQuery превысил лимит ресурсов. при использовании объединений с ИЛИ - PullRequest
0 голосов
/ 03 марта 2020

У меня есть база данных BigQuery, и после 30 секунд выполнения появляется ошибка:

Запрос превысил лимит ресурсов. 34012,91515312311 Использовались секунды ЦП, и этот запрос должен использовать менее 20200,0 ЦП.

при использовании такого запроса:

SELECT
  b.date as Date, 
  SUM(b.revenue) as Revenue
FROM `dataset.a` a
JOIN `dataset.b` b ON b.id = a.low_id OR UPPER(b.id) = a.high_id
WHERE DATE(a.date_and_time) >= DATE('2020-02-01')
AND DATE(a.date_and_time) <= DATE('2020-02-25')

GROUP BY b.date
ORDER BY b.date

Я заметил, что если я удалю группировку и просто вернусь b записей, это будет работать и длиться 40 секунд. Но когда я удаляю b.id = a.low_id или UPPER(b.id) = a.high_id из JOIN, он работает и длится 3 секунды!

Не могли бы вы объяснить такое поведение? И реально ли заставить этот запрос работать без покупки дополнительных слотов?

1 Ответ

2 голосов
/ 03 марта 2020

Попробуйте использовать этот трюк. Он создает массив из двух идентификаторов, а затем удаляет их. Остальное - это просто ваша JOIN:

SELECT b.date as Date, SUM(b.revenue) as Revenue
FROM `dataset.a` a JOIN
     (`dataset.b` bl CROSS JOIN
      UNNEST(ARRAY(a.low_id, a.hi_id)) a_id
     )
      ON bl.id = a.a_id 
WHERE DATE(a.date_and_time) >= DATE('2020-02-01') AND
      DATE(a.date_and_time) <= DATE('2020-02-25')
GROUP BY b.date
ORDER BY b.date
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...