Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将R数据帧导出到SQL_Sql_R_Sql Server - Fatal编程技术网

将R数据帧导出到SQL

将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

我正在尝试将以前使用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
        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?无论如何,它对我不起作用?