使用 R 和来自 R 数据帧的条件查询 MS SQL

Posted

技术标签:

【中文标题】使用 R 和来自 R 数据帧的条件查询 MS SQL【英文标题】:Query MS SQL using R with criteria from an R data frame 【发布时间】:2017-07-13 14:47:12 【问题描述】:

我在 MS SQL Server 中有一个相当大的表(1.2 亿行),我想查询它。我在 R 中还有一个数据框,它具有唯一的 ID,我想将其用作我的查询条件的一部分。我熟悉 dplyr 包,但不确定是否可以在 MS SQL 服务器上执行 R 查询,而不是将所有数据带到我的笔记本电脑内存中(可能会使我的笔记本电脑崩溃)。

当然,其他选择是将数据帧作为表加载到 sql 上,这是我目前正在做的,但我不想这样做。

【问题讨论】:

请邮政编码 【参考方案1】:

根据您想要做什么,您可能会在RODBCext 包中找到价值。

假设您想从 MS SQL 表中提取列,其中 ID 位于 R 中的向量中。您可以尝试如下代码:

library(RODBC)
library(RODBCext)
library(tidyverse)

dbconnect <- odbcDriverConnect('driver=SQL Server;
                          server=servername;database=dbname;trusted_connection=true')

v1 <- c(34,23,56,87,123,45)

qdf <- data_frame(idlist=v1)

sqlq <- "SELECT * FROM tablename WHERE idcol %in% ( ? )"

qr <- sqlExecute(dbconnect,sqlq,qdf,fetch=TRUE)  

基本上,您希望将要传递给查询的所有信息放入数据框中。将其视为查询的变量或参数;对于每个参数,您都需要数据框中的一列。然后将查询编写为字符串并将其存储在变量中。您可以使用 sqlExecute 函数将它们放在一起。

【讨论】:

以上是关于使用 R 和来自 R 数据帧的条件查询 MS SQL的主要内容,如果未能解决你的问题,请参考以下文章

R:基于多个条件的两个数据帧的子集

在R中将具有不同长度和两个条件的不同数据帧的列相乘

R中数据帧的条件求和

R:从一个数据帧中提取行,基于列名匹配来自另一个数据帧的值

根据来自其他数据帧的位置条件在数据帧上编写选择查询,scala

如何根据一个数据帧中的列值和R中另一个数据帧的列标题名称有条件地创建新列