R odbc Impala 从 Select 中的默认数据库更改

Posted

技术标签:

【中文标题】R odbc Impala 从 Select 中的默认数据库更改【英文标题】:R odbc Impala Change from Default Database in Select 【发布时间】:2018-01-24 13:54:28 【问题描述】:

我已经使用Rodbc 包成功连接到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 驱动程序

Impala ODBC 安装笔记

Impala技术原理

Impala 可以从表中执行 COUNT(*) 但不能执行 SELECT *

用odbc和php pdo连接impala,字符串字段为空

用于 Impala ODBC 驱动程序的 pyodbc 参数化插入