R Интеграция SAP Hana с ODBC для Windows

Я хочу подключиться к базе данных SAP Hana из RStudio. Я протестировал несколько библиотек, таких как:

  • RODBC

  • RJDBC

И, наконец, после некоторых чтений и исследований я определил, что ODBC является более новой библиотекой вместо RODBC и имеет лучшую производительность по сравнению с RJDBC.

Я начал с документации RStudio:

1- Установка драйвера SAP HANA link

2- Введение RStudio в пакет ODBC ссылка

3- Страница пакета ODBC на GitHub, ссылка

После установки драйвера для 64-разрядной версии Windows я вижу драйвер HDBODBC из RStudio:

> 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"                   
> 

На приведенном ниже изображении показано, как я настраивал DSN, в котором я указываю IP-адрес и порт:

введите описание изображения здесь

введите описание изображения здесь

Ошибки:

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>"))

Версии:

Windows:

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        
> 

person Mohamed Mostafa El-Sayyad    schedule 29.09.2020    source источник


Ответы (2)


В вашей попытке без DSN параметр ServerNode отсутствует; вместо этого вы использовали HOST, который не является тем же параметром.

Дополнительные сведения см. В справочной документации здесь.

person Lars Br.    schedule 30.09.2020
comment
Большое спасибо, Ларс .. Это сработало, я не знал, что могу указать ServerNode в DBI в качестве параметра. Время извлечения составило 2,11 минуты с использованием ODBC против 10 минут в JDBC для 1,3 миллиона записей и 6 столбцов в моем случае. - person Mohamed Mostafa El-Sayyad; 30.09.2020

Пожалуйста, попробуйте это

Имя хоста как ссылка на хост

введите описание изображения здесь

conn<- dbConnect(odbc::odbc(), "HDODBC")

Это будет работать ....!

person MKULKARNI    schedule 30.09.2020