Подключиться к БД с помощью DBplyr

Проблема

Я пытаюсь подключиться к локальному SQL-серверу с помощью dbplyr, используя инструкции здесь но я продолжаю получать сообщение об ошибке

Неверное имя объекта

Для простоты я использую то же соглашение об именах объектов, что и RStudio в инструкциях по ссылке выше.

Код, вызывающий ошибку

Я использую dbConnect для установления соединения:

con <- dbConnect(odbc::odbc(),
             .connection_string = "Driver={SQL Server};server=DO1COMMONSQL01\\COMMON1D;database=datawarehouse;trusted_connection=Yes",
             timeout = 10)

Я знаю, что все прошло успешно, потому что я вижу БД и ее таблицы на вкладке подключений.

Затем я вызываю простой канал, используя dbplyr:

tbl(con, 'mtcars') %>%
  summarise(Count = n())

Это момент, когда я получаю сообщение об ошибке:

Ошибка: nanodbc / nanodbc.cpp: 1617: 42000: [Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Недопустимое имя объекта «mtcars».

Я пробовал другие варианты этой темы, такие как tbl(con, 'dbo.mtcars')... или tbl(con, 'datawarehouse.dbo.mtcars'...), но безуспешно.


person Dom    schedule 08.05.2020    source источник


Ответы (1)


В приведенном вами примере mtcars - это таблица в datawarehouse. Я предполагаю, что mtcars находится в базе данных, к которой вы подключаетесь. Но вы можете проверить это, используя:

'mtcars' %in% DBI::dbListTables(con)

Если вы хотите запросить таблицу в определенной базе данных или схеме (не по умолчанию), вам необходимо использовать in_schema.

Без in_schema:

tbl(con, 'dbo.mtcars')

Создает запрос sql, например:

SELECT *
FROM "dbo.mtcars"

Где " разделяют имена. Итак, в этом случае SQL ищет таблицу с именем dbo.mtcars, а не таблицу с именем mtcars в dbo.

С in_schema:

tbl(con, in_schema('dbo','mtcars'))

Создает запрос sql, например:

SELECT *
FROM "dbo"."mtcars"

Итак, в этом случае SQL ищет таблицу с именем mtcars в dbo. Потому что каждый термин " цитируется отдельно.

person Simon.S.A.    schedule 08.05.2020