Suchen

Machine- und Deep-Learning-Modelle entwickeln R für KI-Apps mit Microsoft SQL Server

| Autor / Redakteur: Thomas Joos / Stephan Augsten

Um Daten mit R zu analysieren, mussten die Daten früher extra aus der Datenbank exportiert und in R importiert werden. Seit Microsoft SQL Server 2016 lassen sich R-Skripte aber direkt auf dem Datenbankserver ausführen.

Firmen zum Thema

Moderne Versionen des Microsoft SQL Server erlauben es, R-Skripte direkt über die Datenbank laufen zu lassen.
Moderne Versionen des Microsoft SQL Server erlauben es, R-Skripte direkt über die Datenbank laufen zu lassen.
(Bild: Joos / Microsoft)

Durch die Installation der R-Unterstützung auf einem Microsoft SQL Server ab Version 2016 besteht die Möglichkeit, R-Skripte direkt auf einem Datenbankserver auszuführen; und auch in der aktuellen Version SQL Server 2019 können R-Skripte direkt auf Daten des Datenbankservers angewendet werden.

Somit entfällt die Notwendigkeit, Daten erst umständlich exportieren und wieder importieren zu müssen. Vor allem für das Machine Learning, Deep Learning und die damit verbundenen Lernmodelle ist R ideal, wenn in diesem Zusammenhang auch mit Microsoft SQL Server gearbeitet wird.

Bildergalerie
Bildergalerie mit 7 Bildern

Mehr Datenschutz und Leistung bei der Datenverarbeitung

Mit der Verwendung von R direkt auf dem Datenbankserver steigen auch der Datenschutz und die Sicherheit an. Schließlich birgt der Export von Daten immer ein gewisses Risiko, da sie die schützende Umgebung des Datenbankservers verlassen. Der Microsoft R-Client sorgt dafür, dass R-Skripte auch auf anderen Computern ausgeführt werden können.

Neben der verbesserten Sicherheit steigt auch die Leistung der Verarbeitung an. R arbeitet normaler weise mit einem einzelnen Thread (Single Thread) bei der Verarbeitung. Der Microsoft R-Client kann die Daten ebenfalls direkt auf dem SQL-Server ausführen und dabei auch mit mehreren Threads arbeiten. Dadurch entfallen der Transport der Daten und gleichzeitig können mehr Daten verarbeitet werden.

R-Skripte und andere externe Skripte ausführen

R-Skripte werden über die gespeicherte Prozedur „sp_execute_external_script“ ausgeführt. Standardmäßig wird aus Sicherheitsgründen die Ausführung von externen Skripten verhindert. Sollen Skripte eingesetzt werden, muss die SQL-Instanz zunächst für externe Skripte aktiviert werden, zum Beispiel mit:

sp_configure 'external scripts enabled', 1;
RECONFIGURE WITH OVERRIDE;

Die Prozedur benötigt mehrere Optionen. Zunächst muss die Sprache festgelegt werden, in diesem Fall also R:

@language = N'R'

Danach kann der R-Code übergeben werden, ebenfalls mit einer weiteren Option:

@script = N'R-Code als Unicode String'

Ein Beispiel-Befehl sieht folgendermaßen aus:

EXECUTE sp_execute_external_script @language = N'R'   ,@script = N'
   a <- 1
   b <- 2
   c <- a/b
   d <- a*b
   print(c(c, d))
'

Die Version von R und die verwendeten Plattformen werden mit der folgenden Abfrage erstellt:

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

Ein einfaches Hello World-Skript mit R auf einem SQL-Server lässt sich zum Beispiel mit dem folgenden Befehl umsetzen:

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

R kann Daten aus Tabellen mit „SELECT“ auslesen und die Daten an die R-Runtime übergeben. Die Daten werden als Data-Frame ausgegeben. Eine „WITH RESULT SETS“-Klausel definiert das Schema der zurückgegebenen Datentabelle für SQL und fügt den Spaltennamen „NewColName“ hinzu. Mehr Infos dazu sind auf der Seite „Quickstart: Run simple R scripts with SQL machine learning“ zu sehen. Die dazu notwendige, einfache Beispieltabelle kann mit der folgenden Abfrage erstellt werden:

CREATE TABLE RTestData (col1 INT NOT NULL)
INSERT INTO RTestData
VALUES (1);
INSERT INTO RTestData
VALUES (10);
INSERT INTO RTestData
VALUES (100);
GO

Das erwähnte R-Skript sieht dann zum Beispiel folgendermaßen aus:

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

Hier lassen sich jetzt zum Beispiel der Namen der Eingabe- und Ausgabevariablen ändern. Die Standardnamen der Ein- und Ausgabevariablen sind InputDataSet und OutputDataSet, dieses Skript ändert die Namen in SQL_in und 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));

Danach können die Ausgaben für die Variablen ebenfalls angepasst werden:

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

Machine Learning und Deep Learning mit SQL Server und R

Mit den R-Services in Microsoft SQL-Server können, zusammen mit R, einige wichtige Bereiche bei der intelligenten Datenverarbeitung abgewickelt werden. Dazu gehören zum Beispiel die automatische Unterteilung von Kundenfeedback in positive und negative Kategorien.

Regression und das Vorhersagen von kontinuierlichen Werten, zum Beispiel das Vorhersagen des Preises von Immobilien basierend auf Größe und Lage, lassen sich ebenfalls damit realisieren. Ebenfalls möglich ist die Anomalie-Erkennung in Daten auf SQL-Servern. Beispiel dafür sind betrügerische Banktransaktionen.

Microsoft zeigt auf der Seite „Quickstart: Create and score a predictive model in R with SQL machine learning” die Entwicklung eines Lernmodels. Auf GitHub sind ebenfalls verschiedene Beispiele und Vorlagen für das Machine Learning mit R zu finden.

(ID:46873563)

Über den Autor

 Thomas Joos

Thomas Joos

Freiberuflicher Autor und Journalist