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

R(六): RODBC 访问SqlServer的更多相关文章

  1. Oracle透明网关访问SQLServer数据库

    针对oracle数据库不同实例之间的数据访问,我们可以直接通过dblink访问,如果oracle数据库想访问mysql/sqlserver等数据库的数据,我们可以通过配置oracle透明网关实现异构数 ...

  2. Java jdbc访问sqlserver,oracle数据库

    1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...

  3. 使用JDBC访问SQLServer 2008

    使用JDBC访问SQLServer 2008 // 准备数据库驱动程序 String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriv ...

  4. [转]使用 ssh -R 穿透局域网访问内部服务器主机,反向代理 无人值守化

    原文: https://www.cnblogs.com/phpdragon/p/5314650.html ----------------------------------------------- ...

  5. Java jdbc访问sqlserver,oracle数据库 DEMO

    1.JDBC访问Oracle数据库 public class Jdbc_Oracle { // 静态代码块,只会执行一次,类似C#静态构造方法 static { try { // 加载数据库驱动一次 ...

  6. R的数据库访问-MySQL

    目录 1 RMySQL 2 环境与安装 3 建立通信 1 RMySQL R作为一款数据分析的工具,,而MySQL是一款常用的开源关系型数据库软件,非常适用于中小型的数据存储,当二者相互结合时才能爆发出 ...

  7. NX二次开发-NX访问SqlServer数据库(增删改查)C#版

    版本:NX9+VS2012+SqlServer2008r2 以前我写过一个NX访问MySQL数据库(增删改查)的文章https://www.cnblogs.com/nxopen2018/p/12297 ...

  8. VS2019项目docker启动且访问SQLSERVER数据库配置

    VS2019编译.调试的Blazor纯前台项目,使用控制台启动,去连接纯后台的API项目,使用docker启动,并且通过EFCore访问SQLSERVER数据库,有几个地方需要修改配置: 一.前台连后 ...

  9. R语言RODBC数据库操作

    最近准备做一个股票的数据库,用R语言来获取数据,然后存在SQL Sever 2016 express 里面,虽然前面接触过一些操作,但是还是很不熟悉,现在数据已经能获取到了,是时候好好学习一下怎么用R ...

随机推荐

  1. WPF入门教程系列(一) 创建你的第一个WPF项目

    WPF入门教程系列(一) 创建你的第一个WPF项目 WPF基础知识 快速学习绝不是从零学起的,良好的基础是快速入手的关键,下面先为大家摞列以下自己总结的学习WPF的几点基础知识: 1) C#基础语法知 ...

  2. 深入理解Linux修改hostname 转

    当我觉得对Linux系统下修改hostname已经非常熟悉的时候,今天碰到了几个个问题,这几个问题给我好好上了一课,很多知识点,当你觉得你已经掌握的时候,其实你了解的还只是皮毛.技术活,切勿浅尝则止! ...

  3. jQuery:如何验证某个元素是否为空

    [要求]:使用jQuery 如何验证某个元素是否为空   ♪ 答: <body> <div id="div1">aa</div> <inp ...

  4. C# 网络通信基础 总结

    1.WebClient类 如果只是想从特定的URI(统一资源标识符)请求文件,则可以使用最简单的.NET类,System.Net.WebClient.支持http:.https:和file:标识符开头 ...

  5. eclipse 中文乱码

    使用Eclipse编辑文件经常出现中文乱码或者文件中有中文不能保存的问题,Eclipse提供了灵活的设置文件编码格式的选项,我们可以通过设置编码 格式解决乱码问题.在Eclipse可以从几个层面设置编 ...

  6. ES6—解构赋值

    1.什么是解构赋值 ES6允许按照预定的模式,从数组.对象中提取值,对变量进行赋值. 我们直接用例子说明.    2. 数组的解构赋值 数组传统的变量赋值:      var arr=[1,2,3]; ...

  7. Codeforces Round #137 (Div. 2)

    A. Shooshuns and Sequence 显然\([k,n]\)之间所有数均要相同,为了求最少步数,即最多模拟\(n\)次操作即可. B. Cosmic Tables 映射\(x_i,y_i ...

  8. hive权限管理之实践

    一.实践心得 主要参考这个连接,里面说得也挺详细的.http://www.aboutyun.com/thread-12549-1-1.html 总结如下: 1.若赋予用户某个表的权限,查用户在该表所属 ...

  9. sessionStorage和localStorage中 存储

    转:http://my.oschina.net/crazymus/blog/371757 sessionStorage只在页面打开是起作用, localStorage关闭页面后仍然起作用. 有时候,我 ...

  10. kuangbin_ShortPath K (POJ 3159)

    很简单的模板题 放在K那么后的位置的原因大概是 光看题意并不是很容易想到是用最短路解吧 奈何kuangbin分在了最短路专题 一发水过 #include <iostream> #inclu ...