R语言学习日记——数据库链接
发布于 2021-03-30 13:41
有人说我长了张学霸脸,看起来就像学霸。emmm,这绝对是对我最大的误解。我自知天分不高,又懒惰,做事总是虎头蛇尾。好在我这个人非常皮实,越挫越勇的那种。比如健身课的时候,永远都在最后面,毫无存在感的打酱油,等到前面的健身大神们都累趴下的时候,你会发现我这个门外汉依旧尝试着站起来继续干。
做数据分析师的前几年,用SQL取数比较多,我以为那个就是我的天花板。直到有人轻松的告诉我,SQL太简单了,半天就学会了。那带给我幼小心灵深深的震撼不用多说。在我瞳孔地震的时候,她轻松地拿出一本python,“我现在用python进行数据分析”。于是我就这样入了python的坑。我一共买了两本python的书,没有一本坚持啃完的。不得不说,纸质版的语言学习材料,实在太鸡肋了,如果要实现code,得一个字一个字的敲。于是乎,一开始我坚持把每个code都实现看看,到后来不再开电脑,到后来一捧书就睡着了。现在我也会告诉每一个尝试进入数据分析师的同事和朋友,SQL太简单了,半天就学会了,以给他们幼小心灵带去深深的震撼。然后我会轻松的告诉他们,现在我用R进行数据分析。
学习R语言有半年时间了,一直对着材料写code ,一直将数据源导出采用导入excel的形式进行分析,没有尝试链接真实的数据库进行直接取数。一直听小五同我分享她用R在数据库中取数直接分析的心得,我一直满头问号,究竟怎么链接数据库呢。
说到小五,不得不浓墨重彩的提一句,她是将R语言带到我面前的领路人,一位R语言的大神。不仅分享给我了很多免费的材料,而且常常耐心回答我很多入门级(白痴)的问题。感恩的心。小五在知乎等知识型网站坚持发文章回答问题,并且立志成为网红作家。每天在晋江文学,坚持写小说,已经著几部作品,这里推荐她的首部畅销作品《花满枝》,帮助引流,作为她分享的材料的知识付费。当我知道的这些时候,只有深深的佩服。一个懒惰的人对于勤奋的人是怀有最原始的敬佩和崇拜的。
言归正传,我分享下今天的学习成果,尝试着用R直连数据库。第一步是针对系统和数据库类型安装和配置合适的ODBC驱动。由于这块不是在R上实现的,我的学习材料里面没有详细阐述。电脑小白如我,甚至不太理解驱动是什么含义。但我不会放弃,于是我尝试百度,终于找到了相关的安装方法。
首先我要尝试链接的数据库类型是sql server,那么我需要一个sql server的驱动,如果链接oracle,就需要oracle的驱动,如果链接mysql,就需要mysql的驱动。我把话说的很透,节约大家摸索的时间,因为我相信我绝对不是异类,世界上一定有和我一样的电脑小白,会第一次用oracle的驱动尝试链接sql server数据库。
这里分享一个sql server驱动链接:https://docs.microsoft.com/en-us/sql/connect/odbc/download-odbc-driver-for-sql-server?view=sql-server-ver15
其中X64代表64位系统可用,X86代表32位系统可用。我的电脑是64位系统,于是我下载了x64。安装其实没有什么特别的,就是不断点同意,然后下一步,最后就完成了安装。至此已经成功安装了驱动。我天真的以为我可以直连数据库了,于是我是Rstudio里面执行了以下代码:
install.packages("RODBC")
library(RODBC)
mycon <- odbcConnect("xx.xxx.xxx",uid="user",pwd="rply")
得到的结果是:
1:InRODBC::odbcDriverConnect("DSN=192.168.240.46;UID=vrender;PWD=HklCsm@2019") :[RODBC] ERROR: state IM002, code 0, message [Microsoft][ODBC 驱动程序管理器] 未发现数据源名称并且未指定默认驱动程序
2:InRODBC::odbcDriverConnect("DSN=192.168.240.46;UID=vrender;PWD=HklCsm@2019") :ODBC connection failed
嗯??我的驱动明明已经装好了呀,怎么说我没有装驱动呢。原来我漏掉了一步:配置sql server ODBC数据源。于是,打开控制面板->系统和安全->管理工具->ODBC Data Sources(32-bit)
接下来我们就用R访问数仓了,执行语句:
mycon <- odbcConnect("xx.xxx.xxx",uid="user",pwd="rply")
注意了xx.xxx.xxx一开始我填写的是数仓的地址,这边其实要替换成你的数仓命名。比如刚刚我命名的是css。uid是用户名,pwd是密码。
执行之后又得到回复:
Warning messages:
1:InRODBC::odbcDriverConnect("DSN=css;UID=vrender;PWD=HklCsm@2019") :[RODBC] ERROR: state IM014, code 0, message [Microsoft][ODBC 驱动程序管理器] 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
2:InRODBC::odbcDriverConnect("DSN=css;UID=vrender;PWD=HklCsm@2019") :ODBC connection failed
结果不匹配??原来是我刚刚虽然下载的是64位,但配置的是32位的驱动,只要再按照刚刚的配置流程就可以了。
链接上数据库Rstudio返回成功命令。
接着我尝试取数了。我想要取表crm_problem,执行命令:
sqlQuery(mycon, "select * from crm_problem")
得到反馈:
[1] "42S02 208 [Microsoft][ODBC SQL Server Driver][SQL Server]对象名 'crm_problem' 无效。"
[2] "[RODBC] ERROR: Could not SQLExecDirect 'select * from crm_problem'"
??数仓里面明明有这张表,为什么说对象名无效呢?原因是我的数仓里面有多个数据库。
因此我需要指定数据库和用户以及表名,执行以下命令:
sqlQuery(mycon, "select * from hkcrm.dbo.crm_problem")
返回结果是数据表拉。
今天就到这里,我累了~后续用R在数据库表的取数分析,等我心血来潮的时候再写吧~C U ~
本文来自网络或网友投稿,如有侵犯您的权益,请发邮件至:aisoutu@outlook.com 我们将第一时间删除。
相关素材