【问题标题】:RODBC ERROR: Could not SQLExecDirect in mysqlRODBC 错误:无法在 mysql 中执行 SQLExecDirect
【发布时间】:2015-07-21 23:31:39
【问题描述】:

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

【问题讨论】:

  • 你的连接脚本看起来如何
  • 我已经用连接脚本更新了我的问题。
  • 我遇到了完全相同的问题。我的 ODBC 连接适用于简单查询,因此不是 ODBC 问题。 @GowthamGanesh 你找到任何解决方案了吗?
  • 很遗憾没有。我认为它不支持像“group by”这样的复杂查询
  • 我也有同样的问题来自 R 在 SQL 中运行存储过程。但是,我观察到它确实完成了存储过程,但它也会引发错误。我认为它与时间有关,如果它超过了某个时间,它就会抛出这个错误..

标签: mysql r impala


【解决方案1】:

需要安装相关驱动,请看下面link

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

如果您可以使用用户名和密码更新您的 odbcConnect

connection <- odbcConnect("Impala");

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

【讨论】:

  • 我确实尝试安装相关驱动程序。然而,一切看起来都没有希望。我确实尝试过简单的查询,它们似乎运行良好,当我尝试使用涉及连接等的复杂查询时,问题就出现了。
  • 您检查过操作系统中的 ODBC 配置吗?
【解决方案2】:

这也可能是由于您的 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' 时,我得到了您所做的错误,因此请仔细检查您的语法。

【讨论】:

    【解决方案3】:

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

    一些合理的检查:

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

    【讨论】:

      【解决方案4】:

      RODBC 包很奇怪:如果在查询执行中没有更新/删除行,则会抛出错误。

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

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


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

      【讨论】:

        【解决方案5】:

        重新安装 RODBC 包对我有用!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2023-03-27
          • 1970-01-01
          • 1970-01-01
          • 2017-12-07
          • 1970-01-01
          • 2019-11-06
          • 1970-01-01
          • 2016-01-19
          相关资源
          最近更新 更多