缘起
虽然hive可以直接读数据,但是实际上在使用环境中,用来plot图的,暂不会从hive里面读。应用量和使用量较小的情况下,可能更多的对DB中相关数据进行绘制图形。
公司里用的是mysql,因此,这里通过mysql提供数据源就显得比较必要。
数据准备
一台在使用中的mysql服务器。
R语言安装完毕,且可以使用。
连接mysql实操
1.安装对应R的mysql连接的环境
yum install -y mysql-server mysql-devel mysql-lib
安装完毕后,在R中安装包
>install.packages("RMySQL")
#显示
* DONE (RMySQL)
The downloaded source packages are in
‘/tmp/RtmpvKGxvQ/downloaded_packages’
Updating HTML index of packages in '.Library'
Making 'packages.html' ... done
表明安装成功。
数据连接MySQL
一些有用的帮助可以用help命令。
help(package=”RMySQL”) #查看RMySQL的说明文档
链接数据库可以用以下的dbConnect方法。
con <- dbConnect(MySQL(),host="114.55.108.160",dbname="hpwy",user="root",password="20150416Njhp")
#通过summary可以看到对应的描述
summary(con)
<MySQLConnection:0,0>
User: root
Host: 114.55.xxx.xxx
Dbname: hxxx
Connection type: 114.55.xxx.xxx via TCP/IP
表示已经连接上对应数据库。
然后用一个获取对应表的列表命令可以看到已经对数据库进行了操作。
dbListTables(con)
[1] "article_table" "constant_data"
[3] "dynamic_page" "element_plan"
[5] "general_plan" "in_purchasing_user"
可以看到有六张表已经被检索到
后记,其他对应sql操作
可以看到,实际上当环境配置好后,配置和链接DB是比较容易的事情。
对比Hive 可以用HQL操作,mysql的自由度更大,可以用批量sql执行代码的逻辑语句
con <- dbConnect(MySQL(),host="host",dbname="test_dw",user="user",password="password",client.flag= CLIENT_MULTI_STATEMENTS) #client.flag设置这样支持批量查询
dbSendQuery(con,'SET NAMES uft-8')
sql <- "SELECT * FROM fruits;SELECT * FROM test"
res1 <- dbSendQuery(con,sql)
dbFetch(res1, n = -1)
if (dbMoreResults(con)) {
res2 <- dbNextResult(con)
dbFetch(res2, n = -1)
}
dbListResults(con)
dbClearResult(res1)
dbClearResult(res2)
dbDisconnect(con)
也可以使用单独的sql语句进行操作。
dbGetQuery(con, "SELECT * FROM hxxx limit 5")
res <- dbSendQuery(con, "SELECT * FROM hxxx")
data <- dbFetch(res, n=2) #取前2条数据,n=-1时是获取所有数据
data
data <- dbFetch(res, n=-1) #取余下所有数据
data
dbClearResult(res)
dbDisconnect(con) #断开连接