rodbc错误:无法在mysql中执行sqlexecdirect

z0qdvdin  于 2021-06-26  发布在  Impala
关注(0)|答案(4)|浏览(403)

我一直在尝试编写一个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);
h5qlskok

h5qlskok1#

您需要安装相关的驱动程序,请看下面的链接
我也遇到了同样的问题,我所要做的就是更新odbc驱动程序。
如果你能用用户名和密码更新你的odbcconnect

connection <- odbcConnect("Impala");

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

xoefb8l82#

如果数据库中不存在该表,则会出现此错误消息。
一些合理的检查:
检查查询中的表名是否有拼写错误
查看是否可以通过另一个sql客户机在同一数据库上运行相同的查询
请与数据库管理员联系以确认该表确实存在

vxf3dgd4

vxf3dgd43#

这也可能是由于sql查询本身的错误造成的。例如,当我在下面的泛化语句中漏掉了一个'in'时,就出现了这个错误。例子:

stringstuff <- someDT$columnyouwanttouse

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

RESULTS <- sqlQuery(con,  paste0("select

                        fling as flam

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

                        limit 30
                        ;"))

我得到了你的错误,当我遗漏了'在',所以仔细检查你的语法。

jv2fixgn

jv2fixgn4#

rodbc包很奇怪:如果查询执行中没有更新/删除的行,它将抛出一个错误。
所以在使用前 sqlDelete 删除行,或使用 sqlUpdate 要更新值,首先检查是否至少有一行将通过查询删除/更新 COUNT(*) .
在实现了针对oraclesql12g的检查之后,我没有遇到任何问题。
另一种方法是为新的数据批使用暂存表,并使用 sqlQuery 执行 MERGE 命令。如果有零行合并,rodbc不会抱怨。

相关问题