Оптимизация BigQuery генерируется из bigrquery и dbplyr? - PullRequest
0 голосов
/ 11 ноября 2019

dplyr функции, как правило, невероятно производительны, поскольку были оптимизированы сообществом разработчиков ПО с открытым исходным кодом, и многие даже дошли до запуска c++ под капотом, чтобы сделать их намного быстрее.

Получает ли код BigQuery, сгенерированный через bigrquery и dbplyr какую-либо оптимизацию, или он просто генерирует sql так, как может (без оптимизации)? (обратите внимание, что и bigrquery, и dbplyr, как и dplyr, также являются пакетами tidyverse, и оба написаны автором dplyr Хэдли Уикхемом)

Справочная информация

Меня интересуетнасколько оптимизирован сгенерированный код BigQuery, потому что я пытаюсь решить, стоит ли дополнительно оптимизировать некоторые пакетные процессы, написанные в bigrquery и dbplyr путем вручную , переписав некоторые изкод BigQuery (вместо использования этих пакетов). Если я вряд ли увижу значительные улучшения производительности, я не буду тратить время на это.

Пример запроса

Это следующее от bigrquery readme

library(dplyr)

natality <- tbl(con, "natality")

natality %>%
  select(year, month, day, weight_pounds) %>% 
  head(10) %>%
  collect()

1 Ответ

0 голосов
/ 11 ноября 2019

Это, вероятно, зависит от того, для чего вы оптимизируете. Например, время выполнения или цены.

Из моего опыта я сосредоточился на времени выполнения:

  • Нет проблем производительности (времени выполнения) при использовании сгенерированного по умолчанию запроса, хотя я этого не делалПротестировал это всесторонне.
  • dbplyr включает в себя некоторую базовую оптимизацию запросов с версии 1.0.0
  • Нужен написанный человеком код, где люди будут читать код, машинный кодхорошо, когда только машина будет читать код.
  • Я заметил наибольшее ускорение при сохранении промежуточных таблиц на диск во время особенно сложных манипуляций (многократное соединение или задержка / отрыв) с дальнейшим ускорением от добавленияиндекс для промежуточных таблиц (время выполнения уменьшается до четверти или меньше).
  • Также сократили время выполнения путем пакетной записи записей вручную. Например, отфильтруйте все четные идентификационные номера, запустите и сохраните анализ, повторите все нечетные идентификационные номера и добавьте результаты вместе. Но это, вероятно, связано с тем, что я использовал более старую версию SQL.

Однако я использую dbplyr с SQL-сервером, а не с большими запросами. Так что вам придется судить, насколько хорошо оно обобщает ваш контекст.

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