SQL Server 2019运行R脚本加载udpipe模型提示文件不存在如何解决
可行解决步骤
- 检查路径访问权限
SQL Server 执行外部R脚本使用的是独立的服务账户(默认属于SQLRUserGroup用户组),而非当前登录Windows的用户账户。你需要给存放模型的C:\ud文件夹添加以下账户的「读取、列出文件夹内容、读取和执行」权限:SQLRUserGroup(你的实例名对应的用户组,默认实例后缀为MSSQLSERVER)NT Service\MSSQLLaunchpad$你的实例名(默认实例为NT Service\MSSQLLaunchpad$MSSQLSERVER)
- 添加文件存在性校验排查问题
在加载模型的代码前添加校验代码,确认SQL调用的R环境是否能正常识别到文件,再根据输出定位问题:# 输出当前工作目录 print(getwd()) # 检查目标文件是否存在 print(file.exists("C:/ud/english-ewt-ud-2.5-191206.udpipe")) # 输出目录下所有文件,确认文件名是否匹配 print(list.files("C:/ud/")) - 修正路径转义或文件名特殊字符问题
你可以尝试以下两种修改方案:- 把路径的单斜杠替换为双重反斜杠,避免SQL和R的双重转义冲突:
udmodel_english <- udpipe_load_model(file = ''C:\\ud\\english-ewt-ud-2.5-191206.udpipe'')- 观察到报错中文件名的
2.5被识别为25,可以直接修改模型文件名为english-ewt-ud-25-191206.udpipe,代码中同步使用修改后的文件名,规避特殊字符解析问题。
- 将模型放到R默认工作目录加载
用上文的print(getwd())输出SQL调用R环境的默认工作目录,把模型文件放到该目录下,直接使用文件名加载即可,不需要写绝对路径:udmodel_english <- udpipe_load_model(file = ''english-ewt-ud-2.5-191206.udpipe'') - 匹配R包版本与环境
你当前使用的zoo、xts、udpipe包均为R3.5.3版本编译,和SQL Server使用的R3.5.2环境存在版本兼容风险。注意SQL Server调用的R环境和你RStudio使用的R环境是完全独立的,你需要找到SQL Server自带的R程序路径(默认路径为C:\Program Files\Microsoft SQL Server\MSSQL15.你的实例名\R_SERVICES\bin\x64\R.exe),用该程序重新安装适配R3.5.2版本的对应包。
内容的提问来源于stack exchange,提问作者Maz
相关产品推荐
相关产品推荐

