J'essaie de convertir un script scaleR en T-SQL (avec exécution external_script) pour les analyses R dans la base de données dans SQL Server. Le script scaleR avec lequel je travaille est sur le DeepDive Data Science Tutorial on Fraud data by MSDN.
Toutes mes données sont dans SQL Server maintenant (à partir du tutoriel), et tout ce que je veux faire est d'interroger cette table pour obtenir un résumé en utilisant la fonction scaleR rxSummary
(in-database).
C'est ma tentative:T-SQL avec exécution de script externe pour l'intégration de R dans la base de données
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));
Mais renvoie une erreur:
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.
Toute idée comment faire face à cela?
Ai-je manqué une étape?
Merci, cela a fonctionné pour afficher les résultats récapitulatifs. Mais quand je veux enregistrer Summary to SQL Server, j'ai essayé d'ajouter 'summary <- data.frame (sumOut)' au script R, il génère une erreur que rxSummary ne peut pas être forcé dans une trame de données. – Raj
Essayez-vous de stocker l'objet rxSummary en tant que binaire dans SQL Server? Essayez d'utiliser 'résumé <- serialize (sumOut, NULL);' –
C'est mon code maintenant: '@script = N » \t \t \t \t sumOut <- rxSummary ( \t \t \t \t \t \t \t \t \t formule = ~ sexe + balance + NUMTrans + numIntlTrans + Creditline, \t \t \t \t \t \t \t \t \t data = ccFraud \t \t \t \t \t \t \t \t \t) \t \t \t \t impression (sumOut) \t \t \t \t résumé <- serialize (sumOut, NULL); \t \t \t \t », \t @ input_data_1 = N'select * de [scaphandrier]. [Db_datareader].[CcFraud10] ' \t @ input_data_1_name = N'ccFraud', \t @ output_data_1_name = N'summary » \t avec des ensembles de résultats ((résumé varbinary (max) non null));' montre cette erreur: _La l'ensemble de données de sortie doit être de type trame de données; pensez à utiliser data.frame() pour le convertir._ – Raj