用R进行数据库查询,这3种方法最常用

Posted 爱数据原统计网

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用R进行数据库查询,这3种方法最常用相关的知识,希望对你有一定的参考价值。


译者:飞天小象


有很多种使用R查询数据的方法,此篇文章列举了最常见的三种:


1.使用UBI

2.使用dplyr语句

3.使用R Notebooks

 

背景


最近几个包的更新使得用R调用数据库更得心应手。在下面的查询示例中演示了这些R包的部分功能。


  • DBI。DBI规范已经历了很多次改进。当调用数据库时,应该使用兼容DBI的包。

  • dplyr和dbplyr。dplyr包现在有用于和数据库对话的通用SQL后台,并且新的dbplyr包能将R语言转换为特定的数据库变体。在这篇文章中,SQL变体支持以下数据库:Oracle, Microsoft SQL Server, PostgreSQL, Amazon Redshift, ApacheHive, 以及 Apache Impala。以后还会更多。

  • odbc。只要你安装了ODBC驱动,odbc R包就会为你提供一种可以连接到任何数据库的标准方法。

 

R Studio还对其产品进行了更新,从而能更好地调用数据库


  • R Sudio IDE(V1.1)。使用最新版的R Studio IDE,您可以连接、浏览和查询各种数据库中的数据。IDE具有建立新连接的设置向导,以及用于探索已有连接的选项卡。这些新功能是可扩展的,并可以和任意具有连接协议的R包一同工作。

  • R Studio专业驱动程序。如果你使用R Studio专业产品,你可以免费下载R Studio专业驱动程序。下面的例子使用了Oracle ODBC驱动程序。如果你使用开源工具,你可以使用自己的驱动程序或者为连接不同数据库而存在的开源社区驱动和社区包。

 

用R调用数据库是一个广泛的课题,还有更多的工作要做。有一篇早期的博客文章讨论了我们的愿景。这个愿景的一部分是创建一个可以在其中找到所有关于数据库和R的网站。要了解更多信息,请访问我们的网站:db.rstudio.com。

 

例子:在Oracle数据库中查询银行数据


在这个例子中,我们将在Oracle数据库中查询银行数据。我们使用DBI和odbc包连接数据库。这个特定的连接要求由系统管理员配置的数据库驱动程序和数据源名称(DSN)。你的连接也可以使用其他的方法。

 

library(DBI)

library(dplyr)

library(dbplyr)

library(odbc)

con <- dbConnect(odbc::odbc(),"Oracle DB")

 

1.用DBI查询


你可以用DBI的dbGetQuery()功能查询你的数据。直接将SQL代码作为一个引用的字符串粘贴到R里。这个方法有时被称为pass through SQL code,并且可能是你查询数据最简单的方法。应谨慎应用,尽量避免各种引用。比如,'yes'需写作'yes'。


dbGetQuery(con,'

  select "month_idx", "year", "month",

  sum(case when "term_deposit" = 'yes' then 1.0 else 0.0 end) as subscribe,

  count(*) as total

  from "bank"

  group by "month_idx", "year", "month"

')

 

2.用dplyr语句查询

 

你可以用dplyr语句书写代码,dplyr会将你的代码翻译为SQL代码。用dplyr编写查询有几个好处:对于R对象和数据库表,您可以保持一致的语言、不需要SQL或者特定SQL变体的知识,并且你可以利用dplyr使用了拖延战术这个事实。dplyr语句易于阅读,但你可以使用show_query()函数来检查SQL翻译。


q1 <- tbl(con, "bank") %>%

  group_by(month_idx, year, month) %>%

  summarise(

    subscribe = sum(ifelse(term_deposit == "yes", 1, 0)),

    total = n())

show_query(q1)

<SQL>

SELECT "month_idx", "year", "month", SUM(CASE WHEN ("term_deposit" = 'yes') THEN (1.0) ELSE (0.0) END) AS "subscribe", COUNT(*) AS "total"

FROM ("bank")

GROUP BY "month_idx", "year", "month"

 

3.用R Notebooks查询


你知道在R Notebook代码数据块中可以运行SQL代码吗?要使用SQL,在RStudio IDE 中的File>New File目录下打开一个R Notebook。运行一个新的{sql}数据块,用connection=con代码数据块选项来配置你的连接。如果你想把查询输出发送到R数据框架,选用数据块中的output.var="mydataframe"选项。当指定output.var时,你就能在随后的R代码数据块中使用这个输出了。在这个例子中,我们在ggplot2使用这个输出。


```{sql, connection=con, output.var = "mydataframe"}

SELECT "month_idx", "year", "month", SUM(CASE WHEN ("term_deposit" = 'yes') THEN (1.0) ELSE (0.0) END) AS "subscribe",

COUNT(*) AS "total"

FROM ("bank")

GROUP BY "month_idx", "year", "month"

```

```{r}

library(ggplot2)

ggplot(mydataframe, aes(total, subscribe, color = year)) +

  geom_point() +

  xlab("Total contacts") +

  ylab("Term Deposit Subscriptions") +

  ggtitle("Contact volume")

```



在代码数据块中使用SQL好处是无需任何修改就可以粘贴SQL代码。举例来说,你不必刻意避免引用了。如果你正在使用有名的几百行长的spaghetti代码,SQL代码数据块可能是很好的选择。另一个好处就是SQL代码在代码数据块中是被高亮显示的,这样使得它更容易被阅读。

 

总结


用R查询数据并没有唯一的最好的方法。你有许多种方法可以选择,并且每种都有其优势。以下是本文所描述方法的一些优势。


用R进行数据库查询,这3种方法最常用


End.

原文链接:https://www.r-bloggers.com/database-queries-with-r/amp/


数据特工介绍



以上是关于用R进行数据库查询,这3种方法最常用的主要内容,如果未能解决你的问题,请参考以下文章

使用R的数据库查询

SqlServer,分页查询(最简单,新手必备!)

零基础学MySQL-- 数据库最常用的操作查询基础篇 -- 单表查询

零基础学MySQL-- 数据库最常用的操作查询基础篇 -- 单表查询

django-15.查询结果转json(serializers)

OC -- 应用数据储存方式