Démarrage rapide : Exécuter des scripts R simples avec le Machine Learning SQL

S’applique à : SQL Server 2016 (13.x) et versions ultérieures Azure SQL Managed Instance

Dans ce démarrage rapide, vous allez exécuter un ensemble de scripts R simples en utilisant SQL Server Machine Learning Services ou sur des clusters Big Data. Vous allez découvrir comment utiliser la procédure stockée sp_execute_external_script pour exécuter ce script dans une instance SQL Server.

Dans ce démarrage rapide, vous allez exécuter un ensemble de scripts R simples en utilisant SQL Server Machine Learning Services. Vous allez découvrir comment utiliser la procédure stockée sp_execute_external_script pour exécuter ce script dans une instance SQL Server.

Dans ce démarrage rapide, vous allez exécuter un ensemble de scripts R simples en utilisant SQL Server R Services. Vous allez découvrir comment utiliser la procédure stockée sp_execute_external_script pour exécuter ce script dans une instance SQL Server.

Dans ce démarrage rapide, vous allez exécuter un ensemble de scripts R simples avec Azure SQL Managed Instance Machine Learning Services. Vous découvrirez comment utiliser la procédure stockée sp_execute_external_script pour exécuter le script dans votre base de données.

Prérequis

Pour effectuer ce démarrage rapide, vous avez besoin de ce qui suit.

  • Un outil pour exécuter les requêtes SQL qui contiennent des scripts R. Ce guide de démarrage rapide utilise Azure Data Studio.

Exécuter un script simple

Pour exécuter un script R, vous allez le transmettre en tant qu’argument de la procédure stockée système sp_execute_external_script. Cette procédure stockée sur le système démarre le runtime R, transmet les données à R, gère les sessions utilisateur R de manière sécurisée et retourne les résultats au client.

Dans les étapes suivantes, vous allez exécuter cet exemple de script R :

a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))
  1. Ouvrez Azure Data Studio et connectez-vous à votre serveur.

  2. Transmettez le script R complet à la procédure stockée sp_execute_external_script.

    Le script est transmis via l’argument @script. Tout ce qui se trouve dans l’argument @script doit être du code R valide.

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'
    a <- 1
    b <- 2
    c <- a/b
    d <- a*b
    print(c(c, d))
    '
    
  3. Le résultat correct est calculé et la fonction R print le retourne dans la fenêtre Messages.

    Voici comment il se présente.

    Résultats

    STDOUT message(s) from external script:
    0.5 2
    

Exécuter un script Hello World

Un exemple type de script est celui qui génère simplement la chaîne « Hello World ». Exécutez la commande suivante :

EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'OutputDataSet<-InputDataSet'
    , @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO

Les entrées de la procédure stockée sp_execute_external_script sont les suivantes :

Entrée Description
@language définit l’extension de langage à appeler, dans le cas présent, R
@script définit les commandes transmises au runtime R. Tout votre script R doit être placé dans cet argument sous forme de texte Unicode. Vous pouvez aussi ajouter le texte à une variable de type nvarchar, puis appeler cette variable
@input_data_1 données retournées par la requête, transmises au runtime R, qui retourne les données sous forme de trame de données
WITH RESULT SETS la clause définit le schéma de la table de données retournée, ajoutant « Hello World » comme nom de colonne, int pour le type de données

La commande génère le texte suivant :

Hello World
1

Utiliser des entrées et des sorties

Par défaut, sp_execute_external_script accepte un seul jeu de données en entrée, que vous fournissez généralement sous forme de requête SQL valide. Il retourne ensuite une seule trame de données R en sortie.

Pour le moment, utilisons les variables d’entrée et de sortie par défaut de sp_execute_external_script : InputDataSet et OutputDataSet.

  1. Créez une petite table de données de test.

    CREATE TABLE RTestData (col1 INT NOT NULL)
    
    INSERT INTO RTestData
    VALUES (1);
    
    INSERT INTO RTestData
    VALUES (10);
    
    INSERT INTO RTestData
    VALUES (100);
    GO
    
  2. Utilisez l’instruction SELECT pour interroger la table.

    SELECT *
    FROM RTestData
    

    Résultats

    Contenu de la table RTestData

  3. Exécutez le script R suivant. Il récupère les données de la table en utilisant l’instruction SELECT, les transmet via le runtime R et retourne les données sous forme de trame de données. La clause WITH RESULT SETS définit le schéma de la table de données retournée pour SQL Server, ajoutant le nom de colonne NewColName.

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'OutputDataSet <- InputDataSet;'
        , @input_data_1 = N'SELECT * FROM RTestData;'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Résultats

    Sortie du script R qui retourne des données d’une table

  4. À présent, changeons le nom des variables d’entrée et de sortie. Les variables d’entrée et de sortie se nomment par défaut InputDataSet et OutputDataSet ; ce script remplace ces noms par SQL_in et SQL_out :

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N' SQL_out <- SQL_in;'
        , @input_data_1 = N' SELECT 12 as Col;'
        , @input_data_1_name = N'SQL_in'
        , @output_data_1_name = N'SQL_out'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Notez que R respecte la casse. Les variables d’entrée et de sortie utilisées dans le script R (SQL_out, SQL_in) doivent correspondre aux noms définis avec @input_data_1_name et @output_data_1_name, y compris la casse.

    Conseil

    Un seul jeu de données d’entrée peut être passé en tant que paramètre, et un seul jeu de données peut être renvoyé. Toutefois, vous pouvez appeler d’autres jeux de données dans votre code R et des sorties d’autres types peuvent être renvoyées en plus du jeu de données. Vous pouvez également ajouter le mot clé OUTPUT à n’importe quel paramètre pour qu’il soit retourné avec les résultats.

  5. Vous pouvez aussi générer des valeurs en utilisant simplement le script R sans données d’entrée (@input_data_1 est vide).

    Le script suivant génère le texte « hello » et « world ».

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'
    mytextvariable <- c("hello", " ", "world");
    OutputDataSet <- as.data.frame(mytextvariable);
    '
        , @input_data_1 = N''
    WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
    

    Résultats

    Résultats de la requête utilisant <span class=@script comme entrée" />

Vérifier la version de R

Si vous souhaitez savoir quelle version de R est installée, exécutez le script suivant.

EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'print(version)';
GO

La fonction R print retourne la version dans la fenêtre Messages. Dans l’exemple de sortie ci-dessous, vous pouvez voir que la version installée de R est dans ce cas la version 3.4.4.

Résultats

STDOUT message(s) from external script:
                   _
platform       x86_64-w64-mingw32
arch           x86_64
os             mingw32
system         x86_64, mingw32
status
major          3
minor          4.4
year           2018
month          03
day            15
svn rev        74408
language       R
version.string R version 3.4.4 (2018-03-15)
nickname       Someone to Lean On

Lister les packages R

Microsoft fournit un certain nombre de packages R préinstallés avec Machine Learning Services.

Microsoft fournit un certain nombre de packages R préinstallés avec R Services.

Pour afficher la liste des packages R installés, dont la version, les dépendances, la licence et le chemin de la bibliothèque, exécutez le script suivant.

EXEC sp_execute_external_script @language = N'R'
    , @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", "Version", "Depends", "License", "LibPath")]);'
WITH result sets((
            Package NVARCHAR(255)
            , Version NVARCHAR(100)
            , Depends NVARCHAR(4000)
            , License NVARCHAR(1000)
            , LibPath NVARCHAR(2000)
            ));

La sortie provient de installed.packages() dans R et est retournée sous forme de jeu de résultats.

Résultats

Packages installés dans R

Étapes suivantes

Pour savoir comment utiliser des structures de données quand R est utilisé avec le Machine Learning SQL, suivez ce guide de démarrage rapide :