使用RODBC连接R和Vertica

7
这是我第一次连接Vertica。我已经成功使用RODBC库连接到了MySQL数据库。
我在Vertica中设置好了数据库,并从https://my.vertica.com/download-community-edition/安装了Windows 64位ODBC驱动程序。
当我尝试使用R连接到Vertica时,出现以下错误:
channel = odbcDriverConnect(connection = "Server=myserver.edu;Database=mydb;User=mydb;Password=password")

Warning messages:
1: In odbcDriverConnect(connection = "Server=myserver.edu;Database=mydb;User=mydb;Password=password") :
[RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified
2: In odbcDriverConnect(connection = "Server=myserver.edu;Database=mydb;User=mydb;Password=password") :
ODBC connection failed

有人能告诉我如何修复这个问题吗?或者还有其他方法可以使用R连接到Vertica吗?

2个回答

14

虽然不一定是最快的,但我更喜欢使用 R 中的 Vertica JDBC 驱动程序。在不同操作系统上使 ODBC 驱动程序正常工作有点混乱。如果您已经为其他应用程序安装了 Java Runtime Environment (JRE),那么这相当简单。

从 MyVertica 门户网站下载适用于您的 Vertica 服务器版本的 Vertica JDBC 驱动程序。将驱动程序(一个 .jar 文件)放置在您的操作系统的合理位置。

RJDBC安装到您的工作区:

install.packages("RJDBC",dep=TRUE)

在你的R脚本中,加载RJDBC模块并创建一个Vertica驱动程序的实例,调整classPath参数以指向你下载的驱动程序所在的位置和文件名:

library(RJDBC)
vDriver <- JDBC(driverClass="com.vertica.jdbc.Driver", classPath="full\path\to\driver\vertica_jdbc_VERSION.jar")

使用驱动程序对象创建新连接,将主机、用户名和密码替换为您自己的连接细节:

vertica <- dbConnect(vDriver, "jdbc:vertica://host:5433/db", "username", "password")

然后运行您的SQL查询:

myframe = dbGetQuery(vertica, "select Address,City,State,ZipCode from MyTable")

2
感谢 @bpanulla,它奏效了。我需要对此进行小修正。vDriver 应该是 vDriver <- JDBC(driverClass="com.vertica.jdbc.Driver", classPath="path\to\driver\vertica_VERSION_jdk_5.jar")。 - Jana
啊,有趣。我仍在使用Vertica 5,所以也许他们为更新版本更改了包。 - bpanulla
谢谢@bpanulla。我能否通过JDBC上传一个制表符分隔的文本文件到Vertica? - Jana
1
我不知道除了使用某些编程语言(如Java、R等)读取文件并运行插入语句之外,还有其他的方法。如果您有一个制表符分隔的数据文件,最好使用Vertica的批量加载功能通过COPY命令进行操作(https://my.vertica.com/docs/6.1.x/HTML/index.htm#1668.htm)。 - bpanulla

1

在JDBC函数的classPath参数中,您需要使用双斜杠。例如:

vDriver <- JDBC(driverClass="com.vertica.jdbc.Driver", 
classPath="C:\\Program   Files\\Vertica Systems\\JDBC\\vertica-jdk5-6.1.2-0.jar")

对我而言,直接复制粘贴路由失败了,但这个方法对我有用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接