我正在尝试使用RCurl
软件包在SQL 2017上使用Machine Learning Services进行一些Web抓取。这是我尝试过的sp_execute_external_script
代码的示例:
EXEC sp_execute_external_script
@language = N'R',
@script = N'library(RCurl)
library(XML)
url <- "http://www.anywebsite.com/"
tables = getURL(url)
tables <- readHTMLTable(tables, header = TRUE, as.data.frame = TRUE, stringsAsFactors = F)
OutputDataSet <- as.data.frame(tables[1])'
WITH RESULT SETS UNDEFINED;
我遇到以下错误
消息39004,级别16,状态20,第0行发生“ R”脚本错误 在使用HRESULT执行'sp_execute_external_script'期间 0x80004004。消息39019,级别16,状态2,第0行外部脚本 发生错误:正在加载所需的软件包:bitops功能错误 (类型,msg,asError = TRUE):无法连接到 www.anywebsite.com端口80:访问错误呼叫:源... getURL-> curlPerform-> .Call->-> fun
执行错误。检查输出以获取更多信息。错误中 eval(expr,envir,enclos):执行错误。检查输出 了解更多信息。调用:来源-> withVisible->评估->评估-> 。通话执行停止
在sp_execute_external_script
代码中,如果我将URL字符串从“ http”更改为“ https”,则错误基本上是相同的,但是它引用了port 443
。
最初的想法是我遇到了防火墙问题。确实,如果我关闭Windows防火墙,sp_execute_external_script
就会成功。
那...什么exe需要权限?
我尝试为sqlservr.exe
(数据库引擎服务)和launchpad.exe
(SQL Server启动板)添加例外。两次尝试均未成功。
其他说明:
R
代码可以在RStudio中成功运行,RStudio在防火墙中是一个例外。
这是带有Windows Defender防火墙的Windows 10环境。
答案 0 :(得分:1)
您需要禁用Windows firewall rule that is automatically installed when Machine Learning Services is added。
出站防火墙规则的名称类似于“阻止SQL Server实例MSSQLSERVER中的R本地用户帐户访问网络”