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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Sql server Microsoft R服务器逐行插入_Sql Server_R_Stored Procedures_Microsoft R - Fatal编程技术网

Sql server Microsoft R服务器逐行插入

Sql server Microsoft R服务器逐行插入,sql-server,r,stored-procedures,microsoft-r,Sql Server,R,Stored Procedures,Microsoft R,我有一个for循环,它通常写入平面文件。这样,如果有什么东西坏了,我可以从我停止的地方开始。我想使用执行我的R代码的SQL Server 2016存储过程中的新RevoScaleR函数,将此过程转换为直接从SQL表读写 下面是一个简单的存储过程: USE [master] GO /****** Object: StoredProcedure [dbo].[Rscript_geocodeUSACities_TEST] Script Date: 8/8/2017 11:40:40 AM *

我有一个for循环,它通常写入平面文件。这样,如果有什么东西坏了,我可以从我停止的地方开始。我想使用执行我的R代码的SQL Server 2016存储过程中的新RevoScaleR函数,将此过程转换为直接从SQL表读写

下面是一个简单的存储过程:

USE [master]
GO

/****** Object:  StoredProcedure [dbo].[Rscript_geocodeUSACities_TEST]    Script Date: 8/8/2017 11:40:40 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




CREATE PROCEDURE [dbo].[Rscript_geocodeUSACities_TEST]
    @usrOutputFilePath varchar(150)
    ,@usrOutputFileName varchar(150)

AS
BEGIN

    SET NOCOUNT ON;

DECLARE @rScript nvarchar(max) = N'

#### USER INPUTS ####

usrOutputFile <- "' + @usrOutputFilePath + @usrOutputFileName + '"


#### ESTABLISH ENVIRONMENT ####

library(data.table)
library(foreach)
library(XML)
library(RCurl)
library(RJSONIO)

##turn off scientific notation
options(scipen=999)

##establish compute context
sqlServerConnString <- "Server=.;Database=External;Trusted_Connection=true"
sqlServerCC <- RxInSqlServer(connectionString=sqlServerConnString)
rxSetComputeContext(sqlServerCC)
print(rxGetComputeContext())


#### GEOCODE ####

print(dfInputData)
rxDataStep(data=dfInputData,outFile=imp.USA_Cities_Map,append="rows")

'

EXECUTE  sp_execute_external_script
                @language = N'R'
              , @script = @rScript
              ,@input_data_1 =N'select 5 as test_insert'
            ,@input_data_1_name =N'dfInputData'
              ;

END

给你。您不需要将计算上下文设置为SQL Server。但是您必须向运行R外部进程的本地用户授予登录权限。它们都被添加到一个名为SqlRUserGroup的本地组中,您只需要用服务器名替换“dbrownebook”

请注意,您没有为sqlrusergroup添加数据库用户,只添加一个登录名。SQL R服务将模拟调用sp_execute_external_脚本的用户。下文对此进行了解释:

使用master
去
从windows创建登录名[dbrownebook\sqlrusergroup]
创建数据库[外部]
去
使用[外部]
去
创建模式imp
去
创建表imp.USA\u Cities\u Map(test\u insert int)
去
/******对象:StoredProcedure[dbo]。[Rscript\u geocodeUSACities\u TEST]脚本日期:2017年8月8日11:40:40 AM******/
将ANSI_空值设置为ON
去
在上设置带引号的\u标识符
去
创建或更改过程[dbo]。[Rscript\u geocodeUSACities\u TEST]
@usrOutputFilePath varchar(150)
,@usrOutputFileName varchar(150)
作为
开始
不计数;
声明@rScript nvarchar(max)=N'

sqlServerConnString给你。您不需要将计算上下文设置为SQL Server。但是您必须向运行R外部进程的本地用户授予登录权限。它们都被添加到一个名为SqlRUserGroup的本地组中,您只需要用服务器名替换“dbrownebook”

请注意,您没有为sqlrusergroup添加数据库用户,只添加一个登录名。SQL R服务将模拟调用sp_execute_external_脚本的用户。下文对此进行了解释:

使用master
去
从windows创建登录名[dbrownebook\sqlrusergroup]
创建数据库[外部]
去
使用[外部]
去
创建模式imp
去
创建表imp.USA\u Cities\u Map(test\u insert int)
去
/******对象:StoredProcedure[dbo]。[Rscript\u geocodeUSACities\u TEST]脚本日期:2017年8月8日11:40:40 AM******/
将ANSI_空值设置为ON
去
在上设置带引号的\u标识符
去
创建或更改过程[dbo]。[Rscript\u geocodeUSACities\u TEST]
@usrOutputFilePath varchar(150)
,@usrOutputFileName varchar(150)
作为
开始
不计数;
声明@rScript nvarchar(max)=N'

sqlServerConnString对象当然存在于我的数据库中,但它回避了如何插入数据的问题。我没有指定列或任何东西该对象肯定存在于我的数据库中,但它回避了如何插入数据的问题。我没有指定列或任何东西。这个方法会将我的R脚本创建的data.frame写入SQL表吗?是的。为了方便起见,这个示例刚刚使用了input_data_1数据框。David,感谢您到目前为止的所有帮助,但是我遇到了配置/用户端的问题。我没有SQLRUserGroup,也不是DBA,所以我不确定所有的登录和用户配置。你能给我指一个参考资料,让我一步一步地建立我的数据库吗?例如,我在本地服务器组下什么都没有,我使用的是一个本地实例,我的Windows帐户是sysadmin和dbo登录名。David,我相信我在自己的一点窥探下它就可以工作了!谢谢此方法是否将R脚本创建的data.frame写入SQL表?是。为了方便起见,这个示例刚刚使用了input_data_1数据框。David,感谢您到目前为止的所有帮助,但是我遇到了配置/用户端的问题。我没有SQLRUserGroup,也不是DBA,所以我不确定所有的登录和用户配置。你能给我指一个参考资料,让我一步一步地建立我的数据库吗?例如,我在本地服务器组下什么都没有,我使用的是一个本地实例,我的Windows帐户是sysadmin和dbo登录名。David,我相信我在自己的一点窥探下它就可以工作了!谢谢
Error in rxDataStep(data = dfInputData, outFile = imp.USA_Cities_Map,  : 
  object 'imp.USA_Cities_Map' not found
use master
go

create login [dbrownebook\sqlrusergroup] from windows

create database [External]

go

use [External]
go

create schema imp
go
create table imp.USA_Cities_Map(test_insert int)
go


/****** Object:  StoredProcedure [dbo].[Rscript_geocodeUSACities_TEST]    Script Date: 8/8/2017 11:40:40 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO




CREATE OR ALTER PROCEDURE [dbo].[Rscript_geocodeUSACities_TEST]
    @usrOutputFilePath varchar(150)
    ,@usrOutputFileName varchar(150)

AS
BEGIN

    SET NOCOUNT ON;

DECLARE @rScript nvarchar(max) = N'

sqlServerConnString <- "Server=.;Database=External;Trusted_Connection=true"
sqlTable <- RxSqlServerData(table = "imp.USA_Cities_Map", connectionString = sqlServerConnString)

rxDataStep(data=dfInputData,outFile=sqlTable,append="rows")
rxDataStep(data=dfInputData,outFile=sqlTable,append="rows")
rxDataStep(data=dfInputData,outFile=sqlTable,append="rows")

'

EXECUTE  sp_execute_external_script
                @language = N'R'
              , @script = @rScript
              ,@input_data_1 =N'select 5 as test_insert'
            ,@input_data_1_name =N'dfInputData'
              ;

END

GO

exec [Rscript_geocodeUSACities_TEST] '',''

go
select * from imp.USA_Cities_Map