R odbc Impala 从 Select 中的默认数据库更改
Posted
技术标签:
【中文标题】R odbc Impala 从 Select 中的默认数据库更改【英文标题】:R odbc Impala Change from Default Database in Select 【发布时间】:2018-01-24 13:54:28 【问题描述】:我已经使用R
的odbc
包成功连接到Impala。当我使用 Microsoft ODBC 管理器工具创建连接时,我将默认数据库设置为 default
。这是一个存在于 Impala 实例中的数据库,但它不是我真正关心的数据库。我只是想连接到实例并在需要时在数据库之间跳转。
使用通过odbc
连接的SQL Server,我可以做到这一点。假设我建立了一个到 MS SQL Server 的odbc
连接,并将默认数据库设置为DB1
。如果我想查询另一个数据库,比如DB2
,我可以这样做:
library(odbc)
#set up connection to MS SQL server
mssqlcon <- dbConnect(odbc(), "ms_sql_server")
#query DB2
my_table <- dbGetQuery(mssqlcon , "SELECT * FROM [DB2].[dbo].[mytable])
我不知道如何使用 Impala ODBC 连接来做同样的事情。假设在我连接到的 Impala 实例中名为 imp_db2
的数据库上有一个名为 imp_table1
的表。我将用于 MS SQL Server 的技巧不起作用。我尝试过的事情是:
#impala connection
impcon <- dbConnect(odbc(), "Test Impala")
my_table <- dbGetQuery(impcon , "SELECT * FROM [imp_table1])
这会引发错误提示 user does not have privileges to execute 'SELECT' on: default.imp_table1
如果我按照here 的描述尝试USE
语句,我最终会遇到语法错误。
my_table <- dbGetQuery(impcon , "USE imp_db2; SELECT * FROM [imp_table1])
最后,如果我尝试使用类似于我用于 SQL Server 的语法,我会收到以下错误。
my_table <- dbGetQuery(impcon , "SELECT * FROM imp_db2.imp_table1)
User does not have privileges to execute 'SELECT' on: imp_db2.imp_table1
这个错误没有意义,因为我可以使用带有我的凭据的 Web 界面访问此表,我什至可以使用 R Studio 的连接浏览器来预览数据中的列。我知道可能可以更改 MS ODBC 管理器中的连接设置,以便我默认使用不同的表,但我更喜欢单个连接字符串,我可以使用它在 Impala 实例中从一个数据库跳到另一个数据库。
任何帮助将不胜感激。
【问题讨论】:
您在查询之前尝试过use imp_db2;
吗?
@m_kinsey,是的,这是我在示例中提供的尝试之一。没有运气。
【参考方案1】:
怎么样
my_table <- dbGetQuery(impcon , dbplyr::in_schema("imp_db2", "imp_table1"))
【讨论】:
虽然此代码可以回答问题,但提供有关 如何 和 为什么 解决问题的附加上下文将提高答案的长期价值。以上是关于R odbc Impala 从 Select 中的默认数据库更改的主要内容,如果未能解决你的问题,请参考以下文章
为 RODBC 安装 Cloudera Impala ODBC 驱动程序