Schnellstart: Ausführen einfacher R-Skripts mit SQL Machine Learning

Gilt für: SQL Server 2016 (13.x) und höher Azure SQL Managed Instance

In diesem Schnellstart führen Sie einige einfache R-Skripts mithilfe von SQL Server Machine Learning Services oder in Big Data-Clustern aus. Sie erfahren, wie Sie die gespeicherte Prozedur sp_execute_external_script verwenden, um das Skript in einer SQL Server-Instanz auszuführen.

In diesem Schnellstart führen Sie einige einfache R-Skripts mithilfe von SQL Server Machine Learning Services aus. Sie erfahren, wie Sie die gespeicherte Prozedur sp_execute_external_script verwenden, um das Skript in einer SQL Server-Instanz auszuführen.

In diesem Schnellstart führen Sie einige einfache R-Skripts mithilfe von SQL Server R Services aus. Sie erfahren, wie Sie die gespeicherte Prozedur sp_execute_external_script verwenden, um das Skript in einer SQL Server-Instanz auszuführen.

In diesem Schnellstart führen Sie einige einfache R-Skripts mithilfe von Machine Learning Services in Azure SQL Managed Instance aus. Sie erfahren, wie Sie die gespeicherte Prozedur sp_execute_external_script verwenden, um Skripts in Ihrer Datenbank auszuführen.

Voraussetzungen

Zum Durchführen dieser Schnellstartanleitung benötigen Sie folgende Voraussetzungen.

  • Ein Tool zum Ausführen von SQL-Abfragen, die R-Skripts enthalten. In dieser Schnellstartanleitung wird Azure Data Studio verwendet.

Ausführen eines einfachen Skripts

Sie können ein R-Skript ausführen, indem Sie es als Argument an die gespeicherte Systemprozedur sp_execute_external_script übergeben. Diese gespeicherte Systemprozedur startet die R-Runtime, übergibt Daten an R, verwaltet Sitzungen von R-Benutzern sicher und gibt alle Ergebnisse an den Client zurück.

In den folgenden Schritten führen Sie dieses R-Beispielskript aus:

a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))
  1. Öffnen Sie Azure Data Studio, und stellen Sie eine Verbindung mit Ihrem Server her.

  2. Übergeben Sie das gesamte R-Skript an die gespeicherte Prozedur sp_execute_external_script.

    Das Skript wird durch das @script-Argument übergeben. Das @script-Argument darf nur aus zulässigem R-Code bestehen.

    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. Das korrekte Ergebnis wird berechnet, und die R-Funktion print gibt das Ergebnis im Meldungsfenster zurück.

    Die Ausgabe könnte beispielsweise wie folgt aussehen:

    Ergebnisse

    STDOUT message(s) from external script:
    0.5 2
    

Ausführen eines „Hello World“-Skripts

In einem typischen Beispielskript wird nur die Zeichenfolge „Hallo Welt“ (oder „Hello World“) ausgegeben. Führen Sie den folgenden Befehl aus.

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

Folgende Eingaben sind für die gespeicherte Prozedur sp_execute_external_script möglich:

Eingabe BESCHREIBUNG
@language definiert die aufzurufende Spracherweiterung (hier R)
@script definiert die Befehle, die an die R-Runtime übergeben werden Ihr gesamtes R-Skript muss als Unicode-Text in dieses Argument eingeschlossen werden. Sie können den Text auch einer Variablen des Typs nvarchar hinzufügen und die Variable anschließend aufrufen.
@input_data_1 Die von der Abfrage zurückgegebenen Daten werden an die R-Runtime übergeben, die die Daten als Datenrahmen zurückgibt.
WITH RESULT SETS Mit dieser Klausel wird das Schema der zurückgegebenen Datentabelle definiert und „Hello World“ als Spaltenname und int als Datentyp festgelegt.

Der Befehl gibt folgenden Text aus:

Hello World
1

Verwenden von Eingaben und Ausgaben

Standardmäßig akzeptiert sp_execute_external_script ein einzelnes Dataset als Eingabe, das in der Regel in Form einer gültigen SQL-Abfrage angegeben wird. Anschließend wird ein einzelner R-Datenrahmen als Ausgabe zurückgegeben.

Verwenden Sie vorerst die standardmäßig festgelegten Eingabe- und Ausgabevariablen von sp_execute_external_script: InputDataSet und OutputDataSet.

  1. Erstellen Sie eine kleine Tabelle mit Testdaten.

    CREATE TABLE RTestData (col1 INT NOT NULL)
    
    INSERT INTO RTestData
    VALUES (1);
    
    INSERT INTO RTestData
    VALUES (10);
    
    INSERT INTO RTestData
    VALUES (100);
    GO
    
  2. Verwenden Sie die SELECT-Anweisung zum Abfragen der Tabelle.

    SELECT *
    FROM RTestData
    

    Ergebnisse

    Inhalt der RTestData-Tabelle

  3. Führen Sie folgendes R-Skript aus: Es ruft die Daten mithilfe der SELECT-Anweisung aus der Tabelle ab, übergibt sie über die R-Runtime und gibt sie anschließend als Datenrahmen zurück. Die Klausel WITH RESULT SETS definiert das Schema der zurückgegeben Datentabelle für SQL und fügt den Spaltennamen NewColName hinzu.

    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));
    

    Ergebnisse

    Ausgabe des R-Skripts, das Daten aus einer Tabelle zurückgibt

  4. Ändern Sie nun die Namen der Eingabe- und Ausgabevariablen. Standardmäßig werden die Eingabe- und Ausgabevariablen InputDataSet und OutputDataSet verwendet. In diesem Skript werden die Namen in SQL_in und SQL_out geändert:

    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));
    

    Beachten Sie, dass R Groß- und Kleinschreibung beachtet. Die im R-Skript verwendeten Eingabe- und Ausgabevariablen (SQL_out und SQL_in) müssen mit den mit @input_data_1_name und @output_data_1_name definierten Namen (Groß-/Kleinschreibung beachten) identisch sein.

    Tipp

    Nur ein Eingabedataset kann als Parameter übergeben werden, und Sie können nur ein Dataset zurückgeben. Sie können aber andere Datasets in Ihrem R-Code aufrufen und zusätzlich zum Dataset Ausgaben anderer Typen zurückgeben. Außerdem können Sie auch allen Parametern das Schlüsselwort OUTPUT hinzufügen, damit es zusammen mit den Ergebnissen zurückgegeben wird.

  5. Sie können über das R-Skript auch Werte ohne Eingabedaten generieren, indem kein Wert für @input_data_1 festgelegt wird.

    Das folgende Skript gibt den Text „hello“ und „world“ aus.

    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));
    

    Ergebnisse

    Abfrageergebnisse mit <span class=@script als Eingabe" />

Überprüfen der R-Version

Wenn Sie ermitteln möchten, welche Version von R installiert ist, führen Sie das folgende Skript aus.

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

Die R-Funktion print gibt die Version im Meldungsfenster zurück. In der folgenden Beispielausgabe sehen Sie, dass in diesem Fall Version 3.4.4 von R installiert ist.

Ergebnisse

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

Auflisten von R-Paketen

Microsoft bietet eine Reihe von R-Paketen, die mit Machine Learning Services vorinstalliert werden.

Microsoft bietet eine Reihe von R-Paketen, die mit R Services vorinstalliert werden.

Führen Sie folgendes Skript aus, um eine Liste der installierten R-Pakete (einschließlich Version, Abhängigkeiten, Lizenz und Bibliothekspfad) anzuzeigen:

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)
            ));

Die Ausgabe stammt von installed.packages() in R und wird als Resultset zurückgegeben.

Ergebnisse

Installierte Pakete in R

Nächste Schritte

Befolgen Sie diesen Schnellstart, um die Verwendung von Datenstrukturen zu erlernen, wenn R mit SQL Machine Learning verwendet wird: