T-SQL 为数据库内 R 集成执行外部脚本

T-SQL with external script execution for in-database R integration

我正在尝试将 scaleR 脚本转换为 T-SQL(执行 external_script),以便在 SQL 服务器中进行数据库内 R 分析。我正在使用的 scaleR 脚本在 DeepDive Data Science Tutorial on Fraud data by MSDN 上。

我所有的数据现在都在 SQL 服务器中(来自教程),我想做的就是使用 rxSummary scaleR 函数(在数据库中)查询此 table 以获取摘要。
这是我的尝试:

exec sp_execute_external_script 
@language = N'R', 
@script = N' 
sumOut <- rxSummary( 
formula = ~gender + balance + numTrans + numIntlTrans + creditLine, 
data = ccFraud 
) 
', 
@input_data_1 = N'select * from [DeepDive].[db_datareader].[ccFraudSmall]', 
@input_data_1_name = N'ccFraud', 
@output_data_1_name = N'summary' 
with result sets ((summary varchar(max) not null));

但这会引发错误:

STDOUT message(s) from external script: 
Rows Read: 10000, Total Rows Processed: 10000, Total Chunk Time: Less than .001 seconds 
Computation time: 0.000 seconds. 
Msg 11536, Level 16, State 1, Line 5 
EXECUTE statement failed because its WITH RESULT SETS clause specified 1 result set(s), but the statement only sent 0 result set(s) at run time.

知道如何处理这个问题吗?

我是不是漏了一步?

在您的示例中,R 脚本与 SQL 参数定义不匹配。 output_data_1_name 参数值指定从 R returned 到 SQL 服务器的 R 数据帧的名称。但是 R 脚本中没有为 summary 赋值。因此,您收到 0 结果错误。有关说明和示例,请参阅 sp_execute_external_script document

如果您只是想将摘要显示为消息,则可以将 print(sumOut) 添加到 R 脚本。

如果您想 return 数据到 SQL 服务器,您需要构建一个 R 数据帧并分配给 output_1_data