【发布时间】:2021-01-15 03:43:16
【问题描述】:
我想从 RStudio 连接到 SAP Hana 数据库。 我已经测试了几个库,例如:
-
RODBC
-
RJDBC
最后经过一些阅读和研究,我确定 ODBC 是较新的库而不是 RODBC,并且与 RJDBC 相比,它具有更好的性能。
我从 RStudio 文档开始:
1- SAP HANA 驱动安装link
2- RStudio对ODBC包的介绍link
3- ODBC 包 GitHub 页面 link
按照Windows 64位驱动安装后,我可以从RStudio看到驱动HDBODBC:
> library(odbc)
> sort(unique(odbcListDrivers()[[1]]))
[1] "Amazon Redshift (x64)" "HDBODBC" "ODBC Driver 17 for SQL Server" "PostgreSQL ANSI(x64)" "PostgreSQL Unicode(x64)"
[6] "SQL Server"
>
下图是我在配置提供 IP 和端口的 DSN 时的截图:
错误:
1- 这是我尝试连接到 DSN 时得到的结果:
> library(odbc)
> con <- dbConnect(odbc(), "HAN")
Error: nanodbc/nanodbc.cpp:983: HY000: [SAP AG][LIBODBCHDB DLL][HDBODBC] General error;1033 error while parsing protocol
>
2- 这是我尝试在没有 DSN 的情况下连接时得到的结果:
library(DBI)
con <- dbConnect(odbc::odbc(),
driver = "HDBODBC",
uid = "<user>",
pwd = "<pass>",
host = "<ip>",
port = <port>)
Error: nanodbc/nanodbc.cpp:983: HY000: [SAP AG][LIBODBCHDB DLL][HDBODBC] General error;-10719 Connect failed (invalid SERVERNODE '')
其他故障排除信息:
我已经测试了一个连接,它是成功的。
我将它与 Tableau 一起使用,并且效果很好。
我也用过 RJDBC 和 java 驱动,效果也不错,但是性能真的很差:
jdbcDriver <- JDBC(driverClass="com.sap.db.jdbc.Driver",
classPath="C:\\Program Files\\SAP\\hdbclient\\ngdbc.jar")
jdbcConnection <- dbConnect(jdbcDriver,
"jdbc:sap://<ip>:<port>/?autocommit=false",
"<username>",
key_get("<service>", keyring = "<keyring>"))
版本:
窗户:
OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.18363 N/A Build 18363
System Type: x64-based PC
R:
> version
_
platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 6.3
year 2020
month 02
day 29
svn rev 77875
language R
version.string R version 3.6.3 (2020-02-29)
nickname Holding the Windsock
>
【问题讨论】: