Присоединить фрейм данных (или другой объект R) к таблице в базе данных Postgresql, доступной только для чтения?

У меня есть доступ только для чтения к базе данных Postgres. Не могу записать в базу.

Вопрос. Есть ли способ создать и выполнить SQL-запрос, в котором я присоединяю фрейм данных (или другой объект R) к таблице в базе данных Postgres, доступной только для чтения?

Это для доступа к данным из WRDS, https://wrds-www.wharton.upenn.edu/

Вот попытка псевдокода

      #establish a connection to a database
con <- dbConnect( Postgres(), 
          host = 'host.org',
          port = 1234,
          dbname = 'db_name',
          sslmode = 'require',
          user = 'username', password = 'password')

#create an R dataframe (or other object)
df <- data.frame( customer_id = c('a123', 'a-345', 'b0')  )


#write a sql query we will run
sql_query <- "
SELECT t.customer_id, t.* FROM df t
   LEFT JOIN table_name df
      on t.customer_id = df.customer_id
"

my_query_results <- dbSendQuery(con, sql_query)
temp <- dbFetch(res, n = 1)
dbClearResult(res)
my_query_results

Примечание и отредактируйте: приведенный мной пример запроса намеренно очень прост для примера.

В моих реальных запросах может быть 3 или более столбца, к которым я хочу присоединиться, и миллионы строк, к которым я хочу присоединиться.

2 ответа

Использоватьcopy_inlineфункцию отdbplyrпакет, который был добавлен после сообщения об ошибке в этой теме. См. также вопрос здесь .

Пример его использования можно найти здесь .

Если ваше соединение основано на одном условии, его можно переписать с помощьюinпункт:

В SQL:

      SELECT customer_id
FROM table_name 
WHERE customer_id in ('a123', 'a-345', 'b0')

Программно из R:

      sql_query = sprintf(
  "SELECT customer_id
   FROM table_name 
   WHERE customer_id in (%s)",
  paste(sQuote(df$customer_id, q = FALSE), collapse = ", ")
)
Другие вопросы по тегам