Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RODBC错误:无法在mysql中使用SQLExecDirect_Mysql_R_Impala - Fatal编程技术网

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

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脚本

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