R語言:資料庫連接:oracle、mysql及hive

2022-01-22 大音如霜

這一節內容就基本上脫離了基礎,可能需要有點其他領域的積累才能看懂或者閱讀完全數後才能徹底明白,個人建議先將此節內容擱置,因為這一節真的沒有標準的答案:我的系統能搞定的流程和代碼放到你的系統上不一定能搞定,牽涉甚廣,但是我們這裡儘量講解一些通用的內容,但並非本節的內容不重要,因為一旦數據上升到平臺,你需要和資料庫打交道,即從資料庫中讀取數據,然後將結果寫入到資料庫。

這裡使用RJDBC與資料庫溝通,因為它對多種數據均適用,所以這裡暫時以這種簡單的方式與資料庫溝通,但是在使用RJDBC之前你首先要安裝java並配置環境變量,請參看輿情分析的章節,安裝完成之後可以在R裡面安裝rJava和RJDBC包了,如果還是不懂,就需要百度了,比如說如何安裝oracle客戶端,如何配置java的環境變量等等。

RJDBC與Oracle資料庫

install.packages("rjava")install.packages("RJDBC")library(RJDBC)jdbcDriver <- JDBC(driverClass ="oracle.jdbc.driver.OracleDriver", classPath ="c:/ojdbc6.jar",  "") conn <- dbConnect(jdbcDriver,"jdbc:oracle:thin:@//172.35.28.75:1521/bigdata",                  "well","well2")

包加載完成後需要使用JDBC函數指定一個jdbc驅動,第一個參數用於指定驅動的類型,這裡是連接的oracle就是指定oracle類型,參數classPath用於指定驅動存放的路徑,我的jdk是1.6版本所以選擇的驅動也是6版本,你可以去百度搜索並下載相應的ojdbc6.jar文件,不一定是6哦,但儘量要和你的jdk版本一致才好;dbConnect函數用於與資料庫建立連接,第一個參數指定上一步已經構建的驅動文件,第二個參數用於指定資料庫連接的ip,172.35.28.75指所連接遠程數據的ip,1521指oracle的埠,一般都是1521,後面的bigdata指庫的名稱,因人而異,這裡需要注意的是你要保證本機具有訪問遠程資料庫的權限,如果沒有請找運維的同事幫忙開通,而且需要注意這個參數還有另外一種寫法「jdbc:oracle:thin:@172.35.28.75:1521/bigdata」可以參考,第三個參數用於指定用戶名,第四個參數用於指定用戶密碼,通過以上的連接基本上可以和資料庫溝通了。

RJDBC與mysql資料庫

library(RJDBC)jdbcDriver <-JDBC(driverClass="com.mysql.jdbc.Driver",classPath="c:/mysql-connector-java-5.1.18-bin.jar", " ")conn <- dbConnect(jdbcDriver, "jdbc:mysql://172.35.28.75:3306/bigdata?useUnicode=true&characterEncoding=UTF8","mysql", "msql_2016")

連接mysql和oracle幾乎一樣,使用JDBC函數指定一個jdbc驅動,第一個參數用於指定驅動的類型,這裡指定mysql類型,參數classPath用於指定驅動的存放路徑,你可以去百度搜索並下載相應的mysql-connector-java-5.1.18-bin.jar文件;dbConnect函數第一個參數指定上一步已經構建的驅動文件,第二個參數用於指定資料庫連接的ip,172.35.28.75指所連接遠程數據的ip,3306指mysql的埠,一般都是3306,後面的bigdata指庫的名稱,因人而異,再後面?useUnicode=true&characterEncoding=UTF8指定數據的編碼方式,因為mysql資料庫用的是gbk編碼,而項目中我們一般使用utf-8編碼數據,所以要告訴資料庫我們使用的編碼方式,不然會出現上傳的數據亂碼,後兩個參數用於指定用戶及密碼。

連上了資料庫就需要學會一下基本的操作,以下可能牽涉到一些簡單的資料庫語言:SQL,請百度一下sql入門。

RJDBC常見的操作

temp <- data.frame(a = 1:4)dbWriteTable(conn, "TESTJDBC",temp)dbWriteTable(conn, "TEMP", temp)dbSendUpdate(conn, "insert intoTESTJDBC select * from TEMP")dbSendUpdate(conn, "drop tableTEMP")temp <- dbGetQuery(conn, "select *from TESTJDBC")dbSendUpdate(conn, "truncate tableTESTJDBC")

1行創建了一個數據框temp;2行dbWriteTable函數將temp上傳到資料庫,在資料庫上創建了一個新表TESTJDBC,它的第一個參數就是上一步創建的資料庫連接conn,第二行是在資料庫上創建的表名稱,第三個參數就是準備上傳的數據框temp;3行同樣在資料庫上創建一個新表TEMP然後將temp寫入進去;有趣的是RJDBC這個包是個半成品,它不能將數據添加到某個已經存在的表中,只能創建新表,也就是說不能更新表,所以如果更新的話就只能用4行的方式,使用dbSendUpdate函數對數據表進行更新,它的作用是在資料庫上執行一條SQL語句,既然它能做到這一點,我們直接寫一條SQL語句將一個表的數據添加到目標表就可以了,這樣我們只需要將數據上傳到臨時表(2句),在用SQL語句添加到目標表就可以了,「insert into TESTJDBC select from TEMP」這句sql的意思分兩部分:「select from TEMP」表示取出TEMP這個表中的所有數據,「insert into TESTJDBC」表示將剛剛取出的數據插入到TESTJDBC,這樣通過3、4句我們就完成了表的更新;5句用於刪除表TEMP;6行dbGetQuery函數用於查詢數據,第一個參數為資料庫連接;第二個參數是一條SQL查詢語句;除了直接將表刪除以外,還有清空表的操作,7行就是執行一條清空表TESTJDBC語句。
RJDBC連接到Hive需要的R所在的機子也要在Hive集群內,而且已經安裝了Hive,然後才能通過RJDBC連接,上面這些活必須找專業的人去做,不要一個人偷偷的把集群搞癱瘓了,那就悲催了。

RJDBC連接誒Hive

library(RJDBC)jdbcDriver <-JDBC("org.apache.hive.jdbc.HiveDriver",list.files("/usr/lib",pattern="jar$", full.names=T,recursive=TRUE))conn <- dbConnect(jdbcDriver,sprintf('jdbc:hive2://172.35.28.75:10000/default'), 'hive', 'hive_2016')temp <- dbGetQuery(conn,"select *from test")

可以去hive官網下載apache-hive-1.2.1-bin.tar.gz,然後解壓在/usr/lib路徑下,這個路徑可以自己更改;3行創建hive連接,連接的ip、埠等參數和普通資料庫一樣;4行直接使用SQL語句在hive裡面查詢數據。

以上我們連接了各種資料庫,但是這些放在基礎章節比較難以理解,大家可以跳過此節繼續往下一章閱讀,等自己的知識體系構建起來之後再回頭閱讀此節。

好主意值得擴散,激發我們創造的動力,非常感謝花粉傳播者關注理性與文藝,用數據創作內容性的精緻閱讀,更多資料分享添加qq群。

相關焦點

  • 如何將Oracle遷移至mysql?
    1)下載Navicat Premium版本,Navicat for mysql只支持連接mysql資料庫。如果需要支持oracle連接,還需要配置OCI,選擇工具—選項—OCI,選擇對應路徑下文件:配置完成後關閉Navicat再重新打開。
  • MySQL、SqlServer、Oracle 三種資料庫的優缺點總結?
    一、MySQL二、SqlServer三、Oracle一、MySQL優點:體積小、速度快、總體擁有成本低,開源;支持多種作業系統;是開源資料庫,提供的接口支持多種語言連接操作 ;MySQL的核心程序採用完全的多線程編程。線程是輕量級的進程,它可以靈活地為用戶提供服務,而不過多的系統資源。
  • 藍盟IT外包聊聊MySQL、SqlServer、Oracle 三種資料庫
    ,提供的接口支持多種語言連接操作 。用多線程和C語言實現的mysql能很容易充分利用CPU,MySql有一個非常靈活而且安全的權限和口令系統。當客戶與MySql伺服器連接時,他們之間所有的口令傳送被加密,而且MySql支持主機認證。支持ODBC for Windows, 支持所有的ODBC 2.5函數和其他許多函數, 可以用Access連接MySql伺服器, 使得應用被擴展,支持大型的資料庫, 可以方便地支持上千萬條記錄的資料庫。
  • mysql資料庫純文本導出和導入自動化腳本
    PROCESS privilege(s) for this operation' when trying to dump tablespaces增加--no-tablespaces參數mysqldump -u${db_user} -p${db_pass} -T ${tb_output} --fields-terminated-by=',' --fields-enclosed-by
  • Oracle DBLINK MySQL實施步驟
    上周由於業務需要在Oracle資料庫中直接操作mysql資料庫,特意研究一下:8.執行: tar -zxvf mysql-connector-odbc-5.2.5-linux-glibc2.5-x86-64bit.tar.gz9.配置odbc.ini文件10.測試ODBC連接:運行命令: isql testdb -v
  • Python連接oracle資料庫實踐
    csv文件,打算用Python來實現,Python連接Oracle資料庫比其他資料庫稍微複雜一點。本文分享這次連接實踐,使用Python來操作Oracle資料庫的關鍵點總結如下。cx_Oracle是一個Python 擴展模塊,相當於python的Oracle資料庫的驅動,通過使用所有資料庫訪問模塊通用的資料庫 API來實現 Oracle 資料庫的查詢和更新。
  • 詳解PHP操作MySQL資料庫
    ('資料庫連接失敗,錯誤信息:'.mysql_error()); echo $connect;//Resource id #2? $connect = mysql_connect(DB_HOST,DB_USER,DB_PWD) or die('資料庫連接失敗,錯誤信息:'.mysql_error()); //選擇指定資料庫 mysql_select_db(DB_NAME,$connect) or die('資料庫連接錯誤,錯誤信息:'.mysql_error());//將表名字故意寫錯
  • 基於MySQL的高性能資料庫應用開發
    首頁 > 語言 > 關鍵詞 > 資料庫最新資訊 > 正文 基於MySQL的高性能資料庫應用開發
  • 搭建簡單的Oracle到MySQL同步
    =/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2#不要修改這個值!!----- 1 oracle:oinstall 0 Jun 12 16:09 xs0000000000[Bls -l dirdat/--rw-r------ 1 ogg:oggadm 0 Jun 12 16:09 xs0000000000A已完成投遞文件初始化,B也已經接收到投遞文件
  • 面試被問:JDBC底層是如何連接資料庫的?|sql|mysql|數據源|java|...
    背景  前兩天一個小夥伴面試的時候,被問JDBC底層是如何連接資料庫的?  他頓時一臉懵逼,因為大部分人只知道JDBC的幾個步驟,至於底層到底是怎麼連接資料庫的,還真不知道。  由於小夥伴是面試高級開發,問這種問題倒也不能說面試官過分,如果是初級或者中級,那問著問題就確實有些過分了。
  • 大數據之Hive安裝配置
    hive默認將元數據存儲到本地內嵌的Derby資料庫中,但是Derby不支持多會話連結,因此我們使用mysql資料庫來存儲hive的元數據。配置完成hiveSQL的元資料庫之後再開始安裝、配置hive。
  • java連接mysql資料庫的五種方式
    Jdbc-----資料庫的五種連接方式第一種方式:將用戶名和密碼封裝在Properties類中首先,導入資料庫連接包這個是毋庸置疑的。創建一個jdbc驅動dirver。將資料庫(以MySQL為例)的url保存在所創建的字符串url中。
  • VBA連接Mysql資料庫
    ■MySQL的環境配置■VBA連接MySQL資料庫的代碼框架,下面的界面也是Navicat裡面連接設置頁面。MySQL現在給出連接Mysql資料庫的框架代碼▍框架代碼:ADO執行SQL語言。▶▶▶關於引用ADO類庫:連接資料庫需要通過ado這個中間人。
  • MySQL資料庫及應用
    Document.Write("HelloWorld");D. write(「HelloWorld」);5 單選 連接 MySQL 資料庫的正確方法是A. mysql_open("localhost");B. mysql_connect("localhost
  • MySQL與oracle資料庫的一些區別
    【IT168 技術】1、 組函數用法規則  mysql中組函數在select語句中可以隨意使用,但在oracle中 如果查詢語句中有組函數,那其他列名必須是組函數處理過的,或者是group by子句中的列 否則報錯。
  • 訪問Hive數據的幾種騷姿勢
    關於Hive訪問的幾個名詞metadata :hive元數據,即hive定義的表名,欄位名,類型,分區,用戶這些數據。一般存儲關係型書庫mysql中,在測試階段也可以用hive內置Derby資料庫。metastore :hivestore服務端。主要提供將DDL,DML等語句轉換為MapReduce,提交到hdfs中。
  • python連接mysql,teradata,DB2資料庫
    python語言靈活,短小精悍。資料庫是保存數據的重要載體,但結構化查詢語言SQL,表達能力較弱。
  • day06-python資料庫-mysql之安裝
    (Data)數據:描述事務的符號記錄,描述事物的符號既可以是數字,也可以是文字、圖片,圖像、聲音、語言等,數據有多種表現形式,它們都可以經過數位化後存入計算機,在計算機中描述一個事物,就需要抽取這一事物的典型特徵,組成一條記錄,就相當於文件裡的一行內容,如:1 haiyan female 20 甘肅
  • 學習經驗:VS 2019 連接 MySQL 8.0 資料庫,教程圖文詳解!
    1.首先準備好VS2019以及mysql資料庫,兩者都可以去官網下載,我們直接描述連接過程。
  • Hive SQL基本使用詳解
    >創建資料庫時我們一般使用utf8編碼,安裝資料庫一般也選擇utf8編碼,資料庫連接url通常也會使用characterEncoding=UTF-8參數,Hive中文注釋亂碼大部分原因都是因為hive在初始化資料庫時使用的SQL腳本中設定的編碼是latin1編碼。