RODBC: объединение таблиц из разных баз данных (канал)

Я использую пакет RODBC для подключения к базам данных Oracle из R, но мне не удалось объединить таблицы из разных баз данных без «загрузки» таблиц (я не хочу их загружать, так как они слишком большие!). Я хотел бы использовать что-то вроде:

DBa=odbcConnect(dsn="DatabaseA",uid="uid",pwd="pwd",readOnly="True")
DBb=odbcConnect(dsn="DatabaseB",uid="uid",pwd="pwd",readOnly="True")
sqldf("select a.year, sum(b.var) as sumVar
       from sqlFetch(DBa,'tableA') a
            sqlFetch(DBb,'tableB') b
       where a.ID=b.ID
       group by a.year")

Если у кого-то есть идея, это было бы очень полезно! Спасибо заранее.

Лайонел


person user3062082    schedule 03.12.2013    source источник
comment
sqldf предназначен для использования SQL на фреймах данных. Для этого он использует базу данных в качестве серверной части, но не предназначен для доступа к базам данных (хотя с некоторыми усилиями это можно сделать, но это не предназначенное приложение). В любом случае он не поддерживает Oracle, RODBC или ODBC. Он поддерживает SQLite () по умолчанию), H2, MySQL и PostgreSQL.   -  person G. Grothendieck    schedule 29.05.2021


Ответы (3)


Этот вопрос аналогичен вопросу здесь. Похоже, что ответ заключается в том, что RODBC не может получить доступ к двум разным базам данных в одном запросе, используя sqlQuery(...), потому что соединение (канал) зависит от базы данных. Так что либо

(1) do it using downloads (as in your code), or 
(2) have your DBA put both tables in a single database, or 
(3) use something other than R. 
person jlhoward    schedule 03.12.2013

В Netezza он отлично работает, используя функцию sqlQuery.

require("RODBC")

ch <- odbcConnect("NZSQL")

dim.cust.acc1  <- sqlQuery(ch,"Select * from DB1..DIM_ACCOUNT a inner join DB2..BASE_201707 b on a.id_number=b.id_number limit 1000",believeNRows = FALSE)
person abdul mohammad    schedule 30.08.2017

Я не могу комментировать другие ответы или голосовать за @abdul mohammad, но он прав. Я только что сделал сложный запрос, объединяющий до 4 разных баз данных. проверьте свой синтаксис. вы можете вызвать другую базу данных, например

select * from TableInTheConnection A
left join [server ip].TableInOtherConnection B 
...
person Alejo    schedule 28.05.2021
comment
Добро пожаловать в SO, если вы не можете комментировать, не используйте для этого ответ. - person blondelg; 28.05.2021
comment
Но у человека, который спрашивал, может быть просто проблема с синтаксисом. Вот почему я ответил. - person Alejo; 21.06.2021