将R数据帧导出到SQL
我正在尝试将以前使用SQL查询创建的R数据帧导出到SQL,以便在SQL server上执行与数据表的合并联接 具体地说,如果mydat是R中的一个数据帧,那么我希望能够按照下面的思路做一些事情将R数据帧导出到SQL,sql,r,sql-server,Sql,R,Sql Server,我正在尝试将以前使用SQL查询创建的R数据帧导出到SQL,以便在SQL server上执行与数据表的合并联接 具体地说,如果mydat是R中的一个数据帧,那么我希望能够按照下面的思路做一些事情 library('RODBC') edw = odbcConnect(<some sql server>) new_mat = sqlQuery(edw,"SELECT db.code1 db.code2 FROM mydat as a
library('RODBC')
edw = odbcConnect(<some sql server>)
new_mat = sqlQuery(edw,"SELECT
db.code1
db.code2
FROM mydat as a
JOIN SQLServer_Tables.Table1 as fd on fd.codenew=a.codenew and fd.codenew2 = a.codenew2q
"
)
问题是我不知道如何将R数据帧mydat作为合适的对象放入SQL中。我确实发现了一些关于将R对象字符串、向量导出到SQL的旧stackoverflow线程,但它们似乎都不适用于数据帧。如果您使用的是SQL Server 2016或更高版本,并且安装了R或机器学习服务,您可以使用sp_execute_external_脚本直接在SQL Server实例上执行R或Python代码 SQL Server上执行的R代码示例:
-- Return 1 to 10
EXEC sp_execute_external_script
@language =N'R',
@output_data_1_name =N'myD',
@script=N'
myD <- data.frame(c(1:10))
'
然后,为了在连接类型结构中使用结果,您可以创建一个表变量并将R执行代码的结果存储在其中
-- Declare a temporary table:
DECLARE @MY_TBL AS TABLE(X INT, Y1 INT)
-- Store in the table variable the result of the R code execution
INSERT INTO @MY_TBL
EXEC sp_execute_external_script
@language =N'R',
@output_data_1_name =N'myD',
@script=N'
myD <- data.frame(c(1:50))
colnames(myD) <- "X"
myD$y1 <- rpois(n = 50, lambda = 10)
'
-- Use the @MY_TBL variable in the rest of your script
SELECT * FROM @MY_TBL
我认为,您需要在db上具有写权限,然后使用sqlSave之类的东西写入您创建的表或临时表。也许我没有很清楚地说明这个问题,但我认为我不需要写权限。我并没有试图将mydat数据框写入SQL server,我只是试图将其从R导出到SQL中,作为SQL脚本可以识别并与服务器上的对象相交的对象。不,我理解你的意思。sqldf包允许类似于您所描述的内容,但它在本地使用SQLite。如果希望连接发生在数据库中,则数据帧必须以某种方式存在于数据库中。将其写入一个表/temp表是我在R中见过的唯一方法。我在这个主题上找到的最相关的线程是这里的一个,建议的答案是否需要写入SQL server?无论如何,它对我不起作用?