RODBC错误:无法在mysql中使用SQLExecDirect

时间:2015-05-11 12:46:45

标签: mysql r impala

我一直在尝试编写一个R脚本来查询Impala数据库。以下是对数据库的查询:

select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA 

当我手动运行此查询时(读取:通过impala-shell在Rscript之外),我可以获取表内容。但是,当通过R脚本尝试相同时,我收到以下错误:

[1] "HY000 140 [Cloudera][ImpalaODBC] (140) Unsupported query."       
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA'
closing unused RODBC handle 1

为什么在通过R尝试时查询失败?我该如何解决这个问题?在此先感谢:)

修改1:

连接脚本如下所示:

library("RODBC");
connection <- odbcConnect("Impala");
query <- "select columnA, max(columnB) from databaseA.tableA where columnC in (select distinct(columnC) from databaseB.tableB ) group by columnA order by columnA";
data <- sqlQuery(connection,query);

4 个答案:

答案 0 :(得分:0)

您需要安装相关的驱动程序,请查看以下link

我有同样的问题,我所要做的就是更新ODBC驱动程序。

此外,如果您可以使用用户名和密码更新odbcConnect

connection <- odbcConnect("Impala");

connection <- odbcConnect("Impala", uid="root", pwd="password")

答案 1 :(得分:0)

这也可能是由于您的sql查询本身存在错误。例如,当我在以下广义语句中错过“ in”时,我得到了此错误。示例:

stringstuff <- someDT$columnyouwanttouse

somestring <- toString(sprintf("'%s'", stringstuff)) 

RESULTS <- sqlQuery(con,  paste0("select

                        fling as flam

                        and toot **in** (",somestring,")

                        limit 30
                        ;"))

我遗漏了'in'时遇到的错误,因此请仔细检查您的语法。

答案 2 :(得分:0)

如果数据库中不存在该表,则会出现此错误消息。

一些明智的检查:

  • 在查询的表名中检查拼写错误
  • 查看是否可以通过另一个sql客户端在相同的数据库上运行相同的查询
  • 与您的数据库管理员联系以确认该表确实存在

答案 3 :(得分:0)

RODBC程序包很古怪:如果查询执行中没有更新/删除任何行,则会抛出错误。

因此,在使用sqlDelete删除行或使用sqlUpdate更新值之前,请先检查是否至少有一行要通过查询COUNT(*)来删除/更新。

对于Oracle SQL 12g,执行检查后没有问题。


另一种选择是将临时表用于新一批数据,并使用sqlQuery执行MERGE命令。如果合并了零行,则RODBC不会抱怨。