T-SQL с внешним выполнением скрипта для интеграции в базу данных R


Я пытаюсь преобразовать сценарий scaleR в T-SQL (с выполнением external_script) для аналитики в базе данных R в SQL Server. Сценарий масштабирования, с которым я работаю, находится в учебнике DeepDive Data Science по мошенническим данным 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 2

1 ответ:

В вашем примере имеется несоответствие между определениями параметров R-скрипта и SQL. Значение параметра output_data_1_name задает имя кадра данных R, возвращаемого из R в SQL Server. Но в скрипте R нет значения, присвоенного summary. Следовательно, вы получаете ошибку 0 результатов. Описание и пример см. В документеsp_execute_external_script .

Если вы просто пытаетесь отобразить сводку в виде сообщений, то вы можете добавить print(sumOut) в сценарий R.

Если вы хотите вернуть данные в SQL Server, вам нужно построить фрейм данных R и назначить его output_1_data.