BigQuery. Длительное время выполнения для небольших наборов данных - PullRequest
0 голосов
/ 19 июня 2020

Я создал новый облачный проект Google и настроил базу данных BigQuery. Я пробовал разные запросы, все они выполняются слишком долго. На данный момент у нас мало данных, поэтому ожидалась высокая производительность.

Ниже приведены некоторые примеры запросов и время их выполнения.

Запрос №1 (идентификатор задания bquxjob_11022e81_172cd2d59ba):

select date(installtime) regtime
  ,count(distinct userclientid) users
  ,sum(fm.advcost) advspent
from DWH.DimUser du
join DWH.FactMarketingSpent fm on fm.date = date(du.installtime)
group by 1

Ошибка запроса через 1 час + с ошибкой «Запрос превысил лимит ресурсов. Было использовано 14521,457814668494 секунд ЦП, и этот запрос должен использовать менее 12800,0 секунд ЦП».

План выполнения запроса: https://prnt.sc/t30bkz

Запрос №2 (Идентификатор задания bquxjob_41f963ae_172cd41083f):

select fd.date 
      ,sum(fd.revenue) adrevenue
      ,sum(fm.advcost) advspent
from DWH.FactAdRevenue fd
join DWH.FactMarketingSpent fm on fm.date = fd.date
group by 1

Время выполнения ook 59,3 сек c, обработано 7,7 МБ. Что слишком медленно.

План выполнения запроса: https://prnt.sc/t309t4

Запрос № 3 (Идентификатор задания bquxjob_3b19482d_172cd31f629)

select date(installtime) regtime
  ,count(distinct userclientid) users 
from DWH.DimUser du 
group by 1

Время выполнения Прошло 5,0 сек c, обработано 42,3 МБ. Что не страшно, но должно быть быстрее для таких небольших объемов данных.

Используемые таблицы: DimUser - размер таблицы 870,71 МБ, количество строк 2,771,379 FactAdRevenue - размер таблицы 6,98 МБ, количество строк 53,816 FaceMarketingSpent - размер таблицы 68,57 МБ, количество строк 453 600

Вопрос в том, что я делаю не так, чтобы время выполнения запроса было таким большим? Если все в порядке, я был бы рад услышать любые советы, как сократить время выполнения таких простых запросов. Если кто-нибудь из Google прочитает мой вопрос, я был бы признателен, если бы проверили идентификаторы вакансий.

Спасибо!

Ps. Раньше у меня был опыт использования BigQuery для других проектов, и производительность и время выполнения были невероятно хорошими для таблиц размером 50+ ТБ.

1 Ответ

1 голос
/ 20 июня 2020

Отправка того же ответа, который я дал в рабочей области gcp slack:

Оба ваших первых два запроса выглядят так, как будто у вас есть один конкретный рабочий, который перегружен. Это можно увидеть, потому что в разделе вычислений максимальное время сильно отличается от среднего времени. Это может быть по ряду причин, но я вижу, что вы присоединяете таблицу из 700 тыс. + Строк (глядя на 2-й вход) к таблице размером ~ 50 тыс. (Глядя на первый вход). Это не очень хорошая практика, вы должны переключить ее так, чтобы большая таблица была самой левой. см. https://cloud.google.com/bigquery/docs/best-practices-performance-compute?hl=en_US#optimize_your_join_patterns

У вас также может быть сильный перекос в ваших ключах соединения (например, 90% строк находятся на 01.01.2020 или NULL). проверьте это.

Для третьего запроса, это ожидаемое время, попробуйте вместо этого приблизительный счетчик, чтобы ускорить его. Также обратите внимание, что BQ начинает улучшаться, если вы выполняете один и тот же запрос снова и снова, поэтому это будет быстрее.

...