我一直在尝试编写一个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条答案
按热度按时间h5qlskok1#
您需要安装相关的驱动程序,请看下面的链接
我也遇到了同样的问题,我所要做的就是更新odbc驱动程序。
如果你能用用户名和密码更新你的odbcconnect
到
xoefb8l82#
如果数据库中不存在该表,则会出现此错误消息。
一些合理的检查:
检查查询中的表名是否有拼写错误
查看是否可以通过另一个sql客户机在同一数据库上运行相同的查询
请与数据库管理员联系以确认该表确实存在
vxf3dgd43#
这也可能是由于sql查询本身的错误造成的。例如,当我在下面的泛化语句中漏掉了一个'in'时,就出现了这个错误。例子:
我得到了你的错误,当我遗漏了'在',所以仔细检查你的语法。
jv2fixgn4#
rodbc包很奇怪:如果查询执行中没有更新/删除的行,它将抛出一个错误。
所以在使用前
sqlDelete
删除行,或使用sqlUpdate
要更新值,首先检查是否至少有一行将通过查询删除/更新COUNT(*)
.在实现了针对oraclesql12g的检查之后,我没有遇到任何问题。
另一种方法是为新的数据批使用暂存表,并使用
sqlQuery
执行MERGE
命令。如果有零行合并,rodbc不会抱怨。