在我的实际工作中,数据来源一方面是关系型数据库MS SqlServer, 别一方面是HBase。本节主要介绍通过RODBC访问MS SqlServer 安装配置,参见资料(https://msdn.microsoft.com/en-us/library/hh568454(v=sql.110).aspx),请注意:下载的msodbc 的版本与 unixODBC的版本之间有强制的对应关系,参见:(https://msdn.microsoft.com/en-us/library/hh568449(v=sql.110).aspx),本文选择安装的是 msodbcsql-11.0.2270.0 ,按官方介绍,对应的unixodbc 版本为:unixODBC-2.3.0
目录:
- unixODBC安装
- Msodbcsql安装
- ODBC配置
- RODBC安装
- RODBC调用示例
说明:
- unixODBC提供了Linux对ODBC的支持,但它只是一个ODBC的管理器,要连接实际的数据库还需要提供这种数据库的ODBC驱动
- msodbcsql是Linux下用于连接sqlServer的免费ODBC驱动 (注意: 必须先装unixODBC,再安装sqlserverodbc)
- RODBC是R脚本连接ODBC的软件包
unixODBC安装:
- 软件安装包下载(unixODBC-2.3.0.tar.gz),下载地址:https://sourceforge.net/projects/unixodbc/files/unixODBC/2.3.0/
- 命令:yum remove unixODBC (如果机器上已经安装其它版本的unixODBC,安装前需要先将其删除)
- 命令:tar xvzf unixODBC-2.3.0.tar.gz (将下载到本地的软件包上传至linux主机并解压)
- 命令:cd unixODBC-2.3.0 (切换至解压后的目录)
- 命令:CPPFLAGS="-DSIZEOF_LONG_INT=8"
- 命令:export CPPFLAGS
- 命令:./configure --prefix=/usr --libdir=/usr/lib64 --sysconfdir=/etc --enable-gui=no --enable-drivers=no --enable-iconv --with-iconv-char-enc=UTF8 --with-iconv-ucode-enc=UTF16LE
- 命令:make (编译安装)
- 命令:make install
Msodbcsql安装:
- 软件安装包下载(msodbcsql-11.0.2270.0.tar.gz),下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=36437
- 命令:tar xvzf msodbcsql-11.0.2270.0.tar.gz (安装包上传到linux 主机后解压)
- 命令:cd msodbcsql-11.0.2270.0 (切换至解压后主目录)
- 命令:./install.sh verify (验证当前环境是否满足软件安装要求)
- 命令:./install.sh install (上一步ok的前提下,执行安装)
- 命令:odbcinst -q -d -n "ODBC Driver 11 for SQL Server" (测试安装是否成功,如下则ok)
Description=Microsoft ODBC Driver 11 for SQL Server Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0 Threading=1 UsageCount=1
-
ODBC配置:
- 安装成功后,在 /etc 目录下能找着 odbcinst.ini 和 odbc.ini 文件
- odbcinst.ini 表示本机已经安装了哪些类型的驱动,正确安装后内容如下
[ODBC Driver 11 for SQL Server] Description=Microsoft ODBC Driver 11 for SQL Server Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-11.0.so.2270.0 Threading=1 UsageCount=1
-
命令:vim /etc/odbc.ini (配置MS sqlserver 连接信息),在打开的文件中输入如下内容
[testsql] Driver=ODBC Driver 11 for SQL Server Server= 数据库服务器名或IP Database=数据库名
-
注意:Driver 赋值必须与 odbcinst 文件中 安全一致
- 命令:isql testsql sa XXXX (testsql: 设置的odbc连接名,后面以空格输入用户名和密码,成功连接则OK,如图)
- 命令: quit (退出)
RODBC安装:
- 命令:R (进入R命令行)
- 执行:install.packages("RODBC") (安装RODBC)
- 安装完成后,在R命令行下执行如下脚本,结果如下则OK
library(RODBC) pile <- odbcConnect("testsql",uid = "sa",pwd = "yourPassword") data <- sqlQuery(pile,"select top 5 code,name from codeItems") close(pile) data
- 结果如下,则ok