Erstellen einer neuen SQL Server-Tabelle mithilfe von rxDataStep (Tutorial für SQL Server und RevoScaleR)

Gilt für: SQL Server 2016 (13.x) und höhere Versionen

Bei diesem Tutorial handelt es sich um das elfte Tutorial von Lernprogramm: Verwenden von RevoScaleR-Funktionen für R mit SQL Server-Daten. In diesem Lernprogramm erfahren Sie, wie Sie RevoScaleR-Funktionen mit SQL Server verwenden.

In diesem Tutorial erfahren Sie, wie Sie Daten zwischen In-Memory-Datenrahmen, den SQL Server-Kontext und lokale Dateien verschieben.

Hinweis

Für dieses Tutorial wird ein anderes Dataset verwendet. Das Dataset „Airline Delays“ für Verspätungen einer Fluggesellschaft ist ein öffentliches Dataset, das hauptsächlich für Machine-Learning-Experimente verwendet wird. Die Datendateien, die in diesem Beispiel verwendet werden, sind im selben Verzeichnis wie die anderen Produktbeispiele verfügbar.

Laden von Daten aus einer lokalen XDF-Datei

In der ersten Hälfte dieses Tutorials haben Sie die Funktion RxTextData zum Importieren von Daten aus einer Textdatei in R und anschließend die Funktion RxDataStep zum Verschieben der Daten in SQL Server verwendet.

In diesem Tutorial kommt eine andere Herangehensweise zum Einsatz. Es werden Daten aus einer Datei verwendet, die im XDF-Format gespeichert ist. Nach einigen einfachen Transformationen der Daten mithilfe der XDF-Datei speichern Sie die transformierten Daten in einer neuen SQL Server-Tabelle.

Was ist XDF?

Das XDF-Format ist ein XML-Standard für mehrdimensionale Daten. Dies ist ein binäres Dateiformat mit einer R-Schnittstelle, die die Verarbeitung und Analyse von Zeilen und Spalten optimiert. Sie können es für das Verschieben von Daten verwenden, um Teilmengen von Daten zu speichern, die für Analysen hilfreich sind.

  1. Legen Sie den Computekontext auf die lokale Arbeitsstation fest. Für diesen Schritt sind DDL-Berechtigungen erforderlich.

    rxSetComputeContext("local")
    
  2. Definieren Sie ein neues Datenquellenobjekt mithilfe der RxXdfData -Funktion. Geben Sie zur Definition einer XDF-Datenquelle den Pfad zur Datendatei an.

    Sie können den Pfad zur Datei mithilfe einer Textvariable angeben. In diesem Fall gibt es jedoch eine praktischere Methode: Verwenden Sie die rxGetOption-Funktion, und rufen Sie die Datei (AirlineDemoSmall.xdf) aus dem Beispieldatenverzeichnis ab.

    xdfAirDemo <- RxXdfData(file.path(rxGetOption("sampleDataDir"),  "AirlineDemoSmall.xdf"))
    
  3. Rufen Sie rxGetVarInfo für die Daten im Arbeitsspeicher auf, um eine Zusammenfassung des Datasets anzuzeigen.

    rxGetVarInfo(xdfAirDemo)
    

Ergebnisse

Var 1: ArrDelay, Type: integer, Low/High: (-86, 1490)
Var 2: CRSDepTime, Type: numeric, Storage: float32, Low/High: (0.0167, 23.9833)
Var 3: DayOfWeek 7 factor levels: Monday Tuesday Wednesday Thursday Friday Saturday Sunday

Hinweis

Haben Sie bemerkt, dass Sie keine anderen Funktionen aufrufen mussten, um die Daten in die XDF-Datei zu laden, und die Funktion rxGetVarInfo sofort auf die Daten anwenden konnten? Das liegt daran, dass XDF die Standardmethode für die Zwischenspeicherung für RevoScaleR ist. Die Funktion rxGetVarInfo unterstützt neben XDF-Dateien auch mehrere Quelltypen.

Verschieben von Inhalten in SQL Server

Mit der in der lokalen R-Sitzung erstellten XDF-Datenquelle können Sie diese Daten nun in eine Datenbanktabelle verschieben. Dabei wird DayOfWeek als Integer mit Werten von 1 bis 7 gespeichert.

  1. Definieren Sie ein SQL Server-Datenquellobjekt, und geben Sie eine Tabelle für die Speicherung der Daten und eine Verbindung zum Remoteserver an.

    sqlServerAirDemo <- RxSqlServerData(table = "AirDemoSmallTest", connectionString = sqlConnString)
    
  2. Überprüfen Sie vorsichtshalber, ob eine Tabelle mit dem gleichen Namen bereits vorhanden ist, und löschen Sie sie gegebenenfalls. Wenn bereits eine Tabelle mit gleichem Namen vorhanden ist, kann keine neue erstellt werden.

    if (rxSqlServerTableExists("AirDemoSmallTest",  connectionString = sqlConnString))  rxSqlServerDropTable("AirDemoSmallTest",  connectionString = sqlConnString)
    
  3. Laden Sie die Daten mithilfe von rxDataStep in die Tabelle. Diese Funktion verschiebt Daten zwischen zwei bereits definierten Datenquellen und kann die Daten optional bei der Übertragung transformieren.

    rxDataStep(inData = xdfAirDemo, outFile = sqlServerAirDemo,
        transforms = list( DayOfWeek = as.integer(DayOfWeek),
        rowNum = .rxStartRow : (.rxStartRow + .rxNumRows - 1) ),
        overwrite = TRUE )
    

    Diese Tabelle ist groß, also warten Sie, bis eine Statusmeldung wie die folgende angezeigt wird: Gelesene Zeilen: 200000, gesamte verarbeitete Zeilen: 600000.

Laden von Daten aus einer SQL-Tabelle

Sobald Daten in der Tabelle vorhanden sind, können Sie diese mit einer einfachen SQL-Abfrage laden.

  1. Erstellen Sie eine neue SQL Server-Datenquelle. Die Eingabe ist eine Abfrage für die neue Tabelle, die Sie gerade erstellt und in die Sie Daten geladen haben. Diese Definition fügt Faktorebenen für die DayOfWeek-Spalte mithilfe des colInfo-Arguments zu RxSqlServerData hinzu.

    sqlServerAirDemo2 <- RxSqlServerData(
        sqlQuery = "SELECT * FROM AirDemoSmallTest",
        connectionString = sqlConnString,
        rowsPerRead = 50000,
        colInfo = list(DayOfWeek = list(type = "factor",  levels = as.character(1:7))))
    
  2. Rufen Sie rxSummary noch mal auf, um eine Zusammenfassung der Daten in der Abfrage anzuzeigen.

    rxSummary(~., data = sqlServerAirDemo2)
    

Nächste Schritte