R Server 使用平面文件路径

R Server working with flat file paths

我正在尝试在 R(数据库内)服务器的存储过程中使用 fread 函数加载平面文件 .csv

显然,R 服务器(在后台)尝试将此文件复制到 C:\ 中的工作目录,但失败了。

首先,存在R无法读取\的问题,但是Windows个文件路径需要\。我似乎已经克服了这个问题(我认为),但我不确定。

有人使用过将平面文件从文件路径加载到 R Server 引擎中吗?

代码如下:

USE [master]
GO

/****** Object:  StoredProcedure [dbo].[usp_R_FileMap]    Script Date: 7/9/2018 11:25:25 AM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO


create PROCEDURE [dbo].[usp_R_FileMap]
(
@FilePath nvarchar(255),
@FileName nvarchar(255),
@FileExtension nvarchar(10)
)
AS

declare @RCode nvarchar(max)

set @FilePath = replace(@FilePath,'\','\')

set @RCode = N'


##PREPARE ENVIRONMENT##########################################################

usrInputFilePath <- "' + @FilePath + N'"
usrInputFileName <- "' + @FileName + N'"
usrInputFileType <- "' + @FileExtension + N'"

sysPackages <- c("data.table"
                 ,"foreach"
                 ,"reader"
                 ,"stringr"
)

##install / load packages as necessary
for (ii in 1:length(sysPackages)) {
  if (paste0("package:",sysPackages[ii]) %in% search()==F) {library(sysPackages[ii],character.only=T)}##if (!paste0("package:",sysPackages[ii]) %in% search())
}##for (ii in length(sysPackages))


##determine full file paths
vcInputFile <- paste0(usrInputFilePath,ifelse(substring(usrInputFilePath,nchar(usrInputFilePath),nchar(usrInputFilePath))!="\","\",""),usrInputFileName,usrInputFileType)
# vcInputFile <- file.path(usrInputFilePath,paste0(ifelse(substring(usrInputFilePath,nchar(usrInputFilePath),nchar(usrInputFilePath))!="\","\",""),usrInputFileName,usrInputFileType))




##DETERMINE DELIMITER##########################################################


  vcInputFileDelimiter <- gsub("(Detecting sep ... '')","",grep("Detecting sep",capture.output(fread(vcInputFile,nrows=1,stringsAsFactors=F,verbose=T)),value=T))



print(vcInputFileDelimiter)

'


EXEC sp_execute_external_script
  @language =N'R',
  @script=@RCode;


GO

在 R 中,您使用 \.

转义 ("backslash character") \

这适用于 R 中的字符串,并且按预期工作。

看不到错误确实让您更难提供帮助。无论如何,您要加载的文件位于何处?它必须在 SQL 服务器可以读取的位置。正如@Jiggles32 所说,\ 应该可以,否则请尝试 /.

我在此处写了一篇与加载脚本文件相关的博客 post:http://www.nielsberglund.com/2018/03/07/microsoft-sql-server-r-services-sp_execute_external_script-I/

让我们知道进展如何。

除了 \\ 问题之外,如果您尝试读取网络共享上的文件,您将被 Windows 防火墙规则阻止与 SQL Server R Services 一起安装。

如果您真的想从 R Services 的网络共享中提取文件,您可以禁用此规则 (Start -> Windows Firewall with Advanced Security -> Outbound Rules -> Block network access for R local user accounts in SQL Server instance MSSQLSERVER -> Right click -> Disable)。

此外,R 在本地计算机帐户下处理 运行,例如 MSSQLSERVER01,这些用户需要权限才能访问网络共享上的文件。