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指定為主鍵。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM