dbplyr tbl 和 DBI dbListTables - 在 table 存在时出现冲突的结果

dbplyr tbl and DBI dbListTables - conflicting results on table presence

这是我的代码

library(DBI)
library(dplyr)

con <- dbConnect(odbc::odbc(), some_credentials)
dbListTables(con, table_name = "Table_A")

上面的代码 returns Table_A 表示存在 table。现在我正在尝试查询 Table_A

df <- as.data.frame(tbl(con, "Table_A"))

然后回来:

Error: <SQL> 'SELECT *
FROM "Table_A" AS "zzz18"
WHERE (0 = 1)'
  nanodbc/nanodbc.cpp:1587: 42S02: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Invalid object name 'Table_A'. 

所以dplyr没看到。我怎么能和解。我已经仔细检查了拼写。

没有可重现的例子有点难,但我会尽力而为。我认为您应该添加经常用于连接数据库的 dbplyr 包。

library(DBI)
library(dbplyr)
library(tidyverse)

con <- dbConnect(odbc::odbc(), some_credentials)

df <- tbl(con, "Table_A") %>%
      collect() #will create a dataframe in R and use dplyr 

这里有一些额外的资源:

https://cran.r-project.org/web/packages/dbplyr/vignettes/dbplyr.html

希望对您有所帮助!

如前所述,驻留在非默认模式中的任何对象(table、存储过程、函数等)都需要显式引用该模式。默认模式包括 SQL 服务器中的 dbo 和 PostgreSQL 中的 public。因此,如文档所示,在 dbdplyr and Id or SQL in DBI:

中使用 in_schema
# dbplyr VERSION
df <- tbl(con, in_schema("myschema", "Table_A"))


# DBI VERSION
t <- Id(schema = "myschema", table = "Table_A")
df <- dbReadTable(con, t)

df <- dbReadTable(con, SQL("myschema.Table_A"))