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 ответ:
В вашем примере имеется несоответствие между определениями параметров 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
.