Присоединить фрейм данных (или другой объект 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 = ", ")
)