RODBC错误:无法在mysql中使用SQLExecDirect
我一直在尝试编写一个R脚本来查询Impala数据库。以下是对数据库的查询:RODBC错误:无法在mysql中使用SQLExecDirect,mysql,r,impala,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脚本
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);
library(“RODBC”);
连接您需要安装相关驱动程序,请查看以下内容
我也有同样的问题,我所要做的就是更新ODBC驱动程序
另外,如果您可以使用用户名和密码更新odbcConnect
connection <- odbcConnect("Impala");
connection这也可能是由于sql查询本身出错造成的。例如,当我在下面的泛化语句中遗漏了一个“in”时,我得到了这个错误。例如:
stringstuff <- someDT$columnyouwanttouse
somestring <- toString(sprintf("'%s'", stringstuff))
RESULTS <- sqlQuery(con, paste0("select
fling as flam
and toot **in** (",somestring,")
limit 30
;"))
stringstuff如果数据库中不存在该表,则会出现此错误消息
一些合理的检查:
- 检查查询中的表名是否有拼写错误
- 查看是否可以通过另一个sql客户机在同一数据库上运行相同的查询
- 请与数据库管理员联系,确认该表确实存在
RODBC包很奇怪:如果在查询执行过程中没有行被更新/删除,它将抛出一个错误
因此,在使用sqlDelete
删除行或使用sqlUpdate
更新值之前,首先通过查询COUNT(*)
检查是否至少有一行将被删除/更新
对于Oracle SQL 12g,在实施检查后,我没有遇到任何问题
另一种方法是为新的数据批使用暂存表,并使用sqlQuery
执行MERGE
命令。如果合并了零行,RODBC不会抱怨。您的连接脚本看起来如何?我已经用连接脚本更新了我的问题。我遇到了完全相同的问题。我的ODBC连接可以很好地处理一个简单的查询,因此它不是ODBC问题。你在@GowthamGanesh找到解决方案了吗?不幸的是,没有。我认为它不支持像“groupby”这样的复杂查询。我也有同样的问题,R在SQL中运行存储过程。但是,我注意到它确实完成了存储过程,但也抛出了错误。我认为这与时间有关,如果它超过某个时间,就会抛出这个错误。我确实尝试安装了相关的驱动程序。然而,没有什么是有希望的。我确实尝试过简单的查询,但它们似乎很顺利,当我尝试使用涉及连接等的复杂查询时,问题就出现了。您是否检查了操作系统中的ODBC配置?
stringstuff <- someDT$columnyouwanttouse
somestring <- toString(sprintf("'%s'", stringstuff))
RESULTS <- sqlQuery(con, paste0("select
fling as flam
and toot **in** (",somestring,")
limit 30
;"))