使用 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'...)
,但没有成功。
在您链接的示例中,mtcars
是 datawarehouse
中的 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。因为每个术语 "
单独引用。
问题
我正在尝试使用 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'...)
,但没有成功。
在您链接的示例中,mtcars
是 datawarehouse
中的 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。因为每个术语 "
单独引用。