How-to: Statistiksprache R trifft auf den MS SQL Server

Das neueste Feature des MS SQL Server 2016 heißt „SQL Server R Services“ und soll die Statistiksprache R für den SQL Server nutzbar machen. D. h. mussten früher zu analysierende Daten aus dem SQL exportiert und in R importiert werden, können mit dieser Version des SQL Servers alle R Skripte direkt auf dem SQL Server ausgeführt werden, so dass Kosten und Sicherheitsrisiken durch den „Transport“ von Daten entfallen.

Zusätzlich zu den R Services, die das Ausführen von R Skripten auf dem SQL Server ermöglichen, steht der Microsoft R Client zur Verfügung. Mit Hilfe des Microsoft R Clients können R Skripte auch auf jedem Computer ausgeführt, die Daten vom SQL Server abgerufen und im Client verarbeitet werden. Da die normale R Runtime nur single-threaded ist und die benötigen Daten erst vom SQL Server auf den Client gebracht werden müssen, entstehen hierbei für gewöhnlich Wartezeiten. Daher stellt Microsoft mit der ScaleR API eine Möglichkeit bereit, die auf dem Client erzeugten R Skripte vom Client aus zu starten aber auf dem SQL Server auszuführen. Dadurch müssen die Daten nicht mehr zum Client transportiert werden und zusätzlich kann die leistungsstärkere Hardware des SQL Servers ausgenutzt werden.

Auf die Theorie folgt Praxis. Verwendung von R-Code in T-SQL

An einem einfachen Beispiel soll gezeigt werden, wie auf dem SQL Server R-Skripte ausgeführt werden können. Zunächst sollte aber geprüft werden, ob die SQL Server R Services in der SQL Server Instanz zur Verfügung stehen. Das kann mit folgendem Skript geprüft werden:

R Services - sp_execute_external_script

Aufgeführt werden R-Skripte über die gespeicherte Prozedur sp_execute_external_script. Diese verlangt drei Parameter, die Sprache @language = N'R', den R-Code @script= N' R-Code als Unicode String ' und als letztes den Parameter für die Datenübergabe an R @input_data_1 = N' SQL Query String '. Als Abschluss des Statements werden mit WITH RESULTS SETS (( Felder )) die Ergebnisfelder definiert.

Als Beispiel-Szenario soll eine Auswertung von Messwerten zur CPU-Auslastung dienen. Dazu wird die folgende Tabelle angelegt.

R Services - CREATE TABLE

Die angelegte Tabelle wird für das Beispiel mit acht Messwerten gefüllt.

R Services - INSERT Data

Damit der R-Code für das gewählte Beispiel nicht zu kompliziert wird, werden die an den R-Code zu übergebenen Daten vereinfacht, in dem die Werte der DateTime-Spalte in ihre Bestandteile zerlegt werden.

R Services - SELECT

R Services - SELECT Results

Mit Hilfe von R sollen im Folgenden drei Kennzahlen ermittelt werden. Die minimale, maximale und durchschnittliche Auslastung. Der R-Code für diese Kennzahlen und das Ergebnis sind nachfolgend dargestellt.

R Services - R Code

R Services - R Code Ergebnis

Innerhalb des R-Code wird nun Folgendes ausgeführt. Zunächst werden die übergebenen Daten in eine Matrix (vier Spalten und acht Zeilen) umgewandelt. Danach wird mit den Funktionen „min“, „mean“ und „max“ jeweils auf die vierte Spalte der Matrix zugegriffen. Das Ergebnis der jeweiligen Funktionen wird in drei separaten Variablen gespeichert. Der letzte Befehl erstellt eine Matrix für die Ausgabe des Ergebnisses. In diesem Fall wird eine Matrix mit drei Spalten und einer Zeile erstellt. Die Anzahl der Spalten der Matrix muss dabei der Definition des „result sets“ der gespeicherten Prozedur entsprechen.

Anhand des Beispiels konnte gezeigt werden, wie Daten aus einer Datenbanktabelle des SQL Servers an R-Code übergeben, verarbeitet und in Form einer Tabelle wieder ausgegeben wurden. Dem Arbeiten mit R unter Verwendung des SQL Server als Datenquelle steht dementsprechend nichts mehr im Weg. Probieren Sie es einfach aus.