带有外部脚本执行的T-SQL,用于数据库内R集成

时间:2016-06-23 16:06:26

标签: r enterprise sql-server-2016

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

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

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.

知道怎么处理这个吗?

我错过了一步吗?

1 个答案:

答案 0 :(得分:1)

在您的示例中,R脚本和SQL参数定义之间存在不匹配。 output_data_1_name参数值指定从R返回到SQL Server的R数据帧的名称。但是在R脚本中没有为summary分配值。因此,您得到0结果错误。有关说明和示例,请参阅sp_execute_external_script document

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

如果要将数据返回到SQL Server,则需要构建R数据帧并分配给output_1_data