zoukankan      html  css  js  c++  java
  • R(六): RODBC 访问SqlServer

          在我的实际工作中,数据来源一方面是关系型数据库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

    ODBC的访问接口


    • odbcConnect  可以打开一个连接,返回一个用于随后数据库访问的控制(handle)。 打印一个连接会给出ODBC连接的一些细节,而调用 odbcGetInfo 会给出客户端和服务器的一些细节信息。
    • 在一个连接中的表的细节信息可以通过函数 sqlTables 获得。
    • 函数 sqlSave 会把 R 数据框复制到一个数据库的表中,
    • 函数 sqlFetch 会把一个数据库中的表拷贝到 一个 R 的数据框中
    • 通过sqlQuery进行查询,返回的结果是 R 的数据框。
    • sqlCopy把一个 查询传给数据库,返回结果在数据库中以表的方式保存。 一种比较好的控制方式是首先调用 odbcQuery, 然后 用 sqlGetResults 取得结果。后者可用于一个循环中 每次获得有限行,就如函数 sqlFetchMore 的功能。
    • 连接可以通过调用函数 close 来关闭。

    sqlSave函数


    • sqlSave(channel, dat, tablename = NULL, append = FALSE,
              rownames = TRUE, colnames = FALSE, verbose = FALSE,
              safer = TRUE, addPK = FALSE, typeInfo, varTypes,
              fast = TRUE, test = FALSE, nastring = NULL)
      
      sqlUpdate(channel, dat, tablename = NULL, index = NULL,
                verbose = FALSE, test = FALSE, nastring = NULL,
                fast = TRUE)
    • append:代表是否追加,默认不追加,如果一张已经有数据的表,就可以用append追加新的数据,需要同样的column,一般开个这个就行。

    • rownames:可以是逻辑值,也可以是字符型。
    • colnames:列名;
    • verbose:默认为FALSE,是否发送语句到R界面,如果TRUE,那么每条上传数据就会出现在命令栏目致之中。
    • addPK:是否将rownames指定为主键。
  • 相关阅读:
    围棋术语中英文对照
    修改grub及console的分别率 Linux-Ubuntu
    内核crash (Linux)
    pthread_create build
    内联函数定义的关键字inline及由此产生的编译问题简析
    debian家族重量级成员Ubuntu 20.04下载链接开启了。。。
    stm32 GPIO 输出配置参照
    Linux安装应用程序后,点击图标没法应,怎么解决呢?
    c语言中的引用使用
    QA Issue: PN: startUp is upper case, this can result in unexpected behavior. [uppercase-pn]
  • 原文地址:https://www.cnblogs.com/tgzhu/p/5776927.html
Copyright © 2011-2022 走看看