Я работаю с таблицами базы данных с помощью dbplyr
У меня есть локальная таблица, и я хочу объединить ее с большой (150м строк) таблицей в базе данных
База данных PRODUCTION
только для чтения
# Set up the connection and point to the table
library(odbc); library(dbplyr)
my_conn_string <- paste("Driver={Teradata};DBCName=teradata2690;DATABASE=PRODUCTION;UID=",
t2690_username,";PWD=",t2690_password, sep="")
t2690 <- dbConnect(odbc::odbc(), .connection_string=my_conn_string)
order_line <- tbl(t2690, "order_line") #150m rows
У меня также есть локальная таблица, назовем ее заказами
# fill df with random data
orders <- data.frame(matrix(rexp(50), nrow = 100000, ncol = 5))
names(orders) <- c("customer_id", paste0(rep("variable_", 4), 1:4))
скажем, я хотел соединить эти две таблицы, я получаю следующую ошибку:
complete_orders <- orders %>% left_join(order_line)
> Error: `x` and `y` must share the same src, set `copy` = TRUE (may be slow)
Проблема в том, что если бы я установил copy = TRUE
, он попытался бы загрузить все order_line
, и мой компьютер быстро бы исчерпал память
Другим вариантом может быть загрузка таблицы orders
в базу данных. Проблема здесь в том, что база данных PRODUCTION
доступна только для чтения - мне придется загружать ее в другую базу данных. Попытка копирования между базами данных в dbplyr приводит к той же ошибке.
Единственное решение, которое я нашел, это загрузить в базу данных с возможностью записи и использовать sql для присоединения к ним, что далеко от идеала