R语言:数据库连接:oraclemysql及hive
Posted 大音如霜
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R语言:数据库连接:oraclemysql及hive相关的知识,希望对你有一定的参考价值。
这一节内容就基本上脱离了基础,可能需要有点其他领域的积累才能看懂或者阅读完全数后才能彻底明白,个人建议先将此节内容搁置,因为这一节真的没有标准的答案:我的系统能搞定的流程和代码放到你的系统上不一定能搞定,牵涉甚广,但是我们这里尽量讲解一些通用的内容,但并非本节的内容不重要,因为一旦数据上升到平台,你需要和数据库打交道,即从数据库中读取数据,然后将结果写入到数据库。
这里使用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里面查询数据。
以上我们连接了各种数据库,但是这些放在基础章节比较难以理解,大家可以跳过此节继续往下一章阅读,等自己的知识体系构建起来之后再回头阅读此节。
以上是关于R语言:数据库连接:oraclemysql及hive的主要内容,如果未能解决你的问题,请参考以下文章
R语言data.table导入数据实战:data.table使用自定义函数及Reduce函数实现一次性性多表连接
R语言data.table进行滚动数据连接,滚动连接通常用于分析涉及时间的数据(例如商业销售活动和对应的广告投放的安排之之间的关系)实战:实战和动画说明滚动数据连接的形式及方法