какова теория подключения R к Redshift с использованием RPostgreSQL и dplyr

#r #dplyr #amazon-redshift #rpostgresql

#r #dplyr #amazon-redshift #rpostgresql

Вопрос:

Я просто знаю, как подключить R к Redshift с помощью RPostgreSQL и dplyr. Но меня смущает пара вещей:

  1. Когда я хочу показать что-то на экране, например, head(a), где a — результат, получаемый из Redshift, это будет очень медленно. Однако, если я просто выбрал пару полей, скажем, всего 4 столбца, то это намного быстрее. Итак, как R подключает Redshift?
  2. Если я хочу использовать некоторые модели, например, случайный лес или обобщенный линейный, необходимо использовать as.data.frame для передачи результата во фрейм данных на моем локальном компьютере? Я пробовал. Я должен сделать это, прежде чем использовать ggplot2 для рисования диаграмм.

Ответ №1:

Вы читали виньетку dplyr о базах данных? Вы действительно должны прочитать это для получения более подробной информации.

Похоже, вы путаете соединение между R и базой данных и выполнение кода. Соединение позволяет осуществлять связь между R и базой данных — R может отправлять SQL-запросы в БД, а БД может отправлять результаты обратно. Ничего больше.

dplyr пытается перевести некоторый код R в код SQL, чтобы SQL мог выполняться в базе данных, и вы получаете результаты без необходимости самостоятельно писать SQL. Как объясняется в виньетке, существует очень мало команд R, которые имеют доступный перевод. Основные dplyr глаголы работают, т.Е., select , mutate (хотя и не с сгруппированными фреймами данных для SQLite, однако это доступно с postgres), group_by , summarize , arrange , filter . Также базовые математические функции (цитирование из виньетки):

  • основные математические операторы: , -, *, /, %%, ^
  • математические функции: abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, cot, coth, exp, floor, log, log10, round, sign, sin, sinh, sqrt, tan, tanh
  • логические сравнения: <, <=, !=, >=, >, ==, %in%
  • булевы операции: amp;, amp;amp;, |, ||, !, xor
  • основные агрегации: mean, sum, min, max, sd, var

Что-нибудь еще, и вы будете извлекать данные в R и запускать на нем команду R. В случае head() , которого нет в списке, вы, вероятно, переносите всю таблицу в R, а затем просматриваете первые 6 строк.

Для Redshift это будет особенно медленно для широкой таблицы — Redshift использует столбчатое хранилище, поэтому есть значительные преимущества в производительности, если извлекать только нужные вам столбцы.

Кроме того, как объяснено в виньетке, dplyr как можно дольше откладывает оценку SQL, что повышает эффективность. Предполагаемый способ получения результатов в R collect — но as_data_frame , похоже, он тоже работает.

Комментарии:

1. большое спасибо! Я только начал изучать это. Я даже не знаю этого документа

2. head() из базы данных будет удалено только 6 строк.