3

我连接到我们的数据库:

con <- dbConnect(odbc::odbc(), "myHive")

我知道这是成功的,因为当我运行它时,在 RStudio 的右上角我可以看到我们所有的数据库和表。

我的问题是,如何选择特定的数据库表组合?文档显示了用户选择单个表“航班”,但我需要执行 somedatabase.sometable 的等效操作。

试过:

mytable <- tbl(con, "somedb.sometable")
    Error in new_result(connection@ptr, statement) : 
      nanodbc/nanodbc.cpp:1344: 42S02: [Hortonworks][SQLEngine] (31740) Table or view not found: HIVE..dp_enterprise.uds_order 

然后尝试:

mytable <- tbl(con, "somedb::sometable")

Error in new_result(connection@ptr, statement) : 
  nanodbc/nanodbc.cpp:1344: 42S02: [Hortonworks][SQLEngine] (31740) Table or view not found: HIVE..somedb::sometable

我也尝试删除引号“”。

在 RStudio 的连接窗格中,我可以看到 somedb.sometable。在那里!如何将其保存到变量 mytable?

4

2 回答 2

1

创建连接时选择数据库,创建 tbl 时选择表(使用from参数)。

dbConnect 没有标准接口,因此传递数据库名称的确切方式取决于您使用的 DBDriver。IndeedDBI::dbConnect只是对特定于驱动程序的通用调度dbConnect

在您的情况下,驱动程序是odbc这样您可以查看文档odbc::dbConnect,您会看到相关的参数是database.

这将起作用:

con <- dbConnect(odbc::odbc(), "myHive", database = "somedb")
df <- tbl(con, from = "sometable")

对于大多数其他驱动程序(例如RMariaDB, RMySQL, RPostgres, RSQLite),该参数称为dbname,因此您可以这样做:

con <- dbConnect(RMariaDB::MariaDB(), dbname = "somedb")
df <- tbl(con, from = "sometable")
于 2019-05-02T11:08:52.507 回答
0

我想我找到了,使用in_schema

mytable <- tbl(con, in_schema("somedb", "sometable"))

这会返回一个列表而不是 tbl,所以我不确定。

于 2018-11-14T22:31:57.540 回答