使用 DBplyr 连接到数据库

Connect to a DB using DBplyr

问题

我正在尝试使用 instructions here 连接到使用 dbplyr 的本地 SQL 服务器,但我一直收到一条错误消息

Invalid object name

为简单起见,我使用与 RStudio 在上面 link 的说明中相同的对象命名约定。

产生错误的代码

我使用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())

这是我收到错误消息的时间点:

Error: nanodbc/nanodbc.cpp:1617: 42000: [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid object name 'mtcars'.

我尝试过该主题的其他变体,例如 tbl(con, 'dbo.mtcars')...tbl(con, 'datawarehouse.dbo.mtcars'...),但没有成功。

在您链接的示例中,mtcarsdatawarehouse 中的 table。我将假设 mtcars 在您要连接的数据库中。但是您可以使用以下方法检查:

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

如果你想在特定的数据库或模式(不是默认的)中查询 table 那么你需要使用 in_schema.

没有in_schema:

tbl(con, 'dbo.mtcars')

生成一个 sql 查询,如:

SELECT *
FROM "dbo.mtcars"

其中 " 分隔名称。因此,在这种情况下,SQL 正在寻找一个名为 dbo.mtcars 的 table 而不是 dbo.

中名为 mtcars 的 table

in_schema:

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

生成一个 sql 查询,如:

SELECT *
FROM "dbo"."mtcars"

所以在这种情况下 SQL 正在 dbo 中寻找名为 mtcars 的 table。因为每个术语 " 单独引用。