我无法在R命令行或Rstudio中连接到Netezza设备。但是,我可以使用isql和nzodbcsql命令行工具连接到设备。
到目前为止,这是我在Redhat Linux中的配置:
1.已安装unixODBC管理器
2.用户环境变量:
unixODBC 2.3.4
DRIVERS............: /common/odbc/odbcinst.ini
SYSTEM DATA SOURCES: /common/odbc/odbc.ini
FILE DATA SOURCES..: /common/odbc/ODBCDataSources
USER DATA SOURCES..: /common/odbc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
library(RODBC)
z = odbcConnect("testdsn")
Warning messages:
1: In RODBC::odbcDriverConnect("DSN=testdsn") :
[RODBC] ERROR: state 01000, code 0, message [unixODBC][Driver Manager]Can't open lib '/usr/local/nz/lib64/libnzodbc.so' : file not found
2: In RODBC::odbcDriverConnect("DSN=testdsn") :
ODBC connection failed
此错误通常表明LD_LIBRARY_PATH设置不正确。我知道虽然我在命令行上设置了它,但没有为R设置它,所以我在Renviron.site配置文件中进行了设置。
Sys.getenv("LD_LIBRARY_PATH")
[1] "/lib64:/usr/include:/usr/lib64:/usr/local/nz/lib64"
我还在libnzodbc.so文件上运行了一个ldd,并且没有看到任何链接问题:
system("ldd /usr/local/nz/lib64/libnzodbc.so")
linux-vdso.so.1 => (0x00007fff1fdce000)
libc.so.6 => /lib64/libc.so.6 (0x00007f26ede93000)
libm.so.6 => /lib64/libm.so.6 (0x00007f26edb91000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f26ed975000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f26ed771000)
libkrb5.so.3 => /usr/local/nz/lib64/libkrb5.so.3 (0x00007f26ee58a000)
libkrb5support.so.0 => /usr/local/nz/lib64/libkrb5support.so.0 (0x00007f26ed664000)
libcom_err.so.3 => /usr/local/nz/lib64/libcom_err.so.3 (0x00007f26ed561000)
libk5crypto.so.3 => /usr/local/nz/lib64/libk5crypto.so.3 (0x00007f26ed41e000)
/lib64/ld-linux-x86-64.so.2 (0x00007f26ee54c000)
libresolv.so.2 => /lib64/libresolv.so.2 (0x00007f26ed205000)
我可以通过unixODBC和Netezza命令行工具进行查询,但是不能通过R或Rstudio查询。据我所知,我已经正确设置了R环境变量来查找库路径,但是仍然找不到文件。有人知道我是否还有其他东西吗?
R版本:3.4.4 Netezza驱动程序版本:3.51 Rehat版本:7.6
答案 0 :(得分:0)
我想出了如何使其工作的方法。由于某种原因,R似乎忽略了LD_LIBRARY_PATH中的条目。相反,我使用ldconfig添加了库位置。将它添加到那里并加载(通过运行ldconfig -p验证)后,我便可以在R中进行查询。