Definieren und Verwenden von Computekontexten (SQL Server und RevoScaleR-Tutorial)

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

Dies ist Tutorial 4 der RevoScaleR-Tutorialreihe zum Verwenden von RevoScaleR-Funktionen mit SQL Server.

Im vorherigen Tutorial haben Sie RevoScaleR-Funktionen zum Untersuchen von Datenobjekten verwendet. In diesem Tutorial wird die RxInSqlServer-Funktion erläutert, mit der Sie einen Computekontext für einen Remote-SQL-Server definieren können. Mit einem Remotecomputekontext können Sie die R-Ausführung von einer lokalen Sitzung zu einer Remotesitzung auf dem Server verschieben.

  • Lernen Sie die Elemente eines SQL Server-Remote-Computekontexts kennen
  • Aktivieren der Nachverfolgung für ein Compute-Context-Objekt

RevoScaleR unterstützt mehrere Computekontexte: Hadoop, Spark in HDFS und datenbankinterne SQL Server. Für SQL Server wird die RxInSqlServer-Funktion für Serververbindungen und das Übergeben von Objekten zwischen dem lokalen Computer und dem Remoteausführungskontext verwendet.

Erstellen und Festlegen eines Computekontexts

Die RxInSqlServer-Funktion, die den SQL Server-Computekontext erstellt, verwendet die folgenden Informationen:

  • Verbindungszeichenfolge für die SQL Server-Instanz
  • Spezifikation zur Verarbeitung der Ausgabe
  • Optionale Spezifikation eines freigegebenen Datenverzeichnisses
  • Optionale Argumente, die die Ablaufverfolgung oder das Angeben der Ablaufverfolgungsebene ermöglichen

In diesem Abschnitt werden Sie durch die einzelnen Teile geführt.

  1. Geben Sie die Verbindungszeichenfolge für die Instanz an, in der die Berechnungen durchgeführt werden sollen. Sie können die zuvor erstellte Verbindungszeichenfolge erneut verwenden.

    Verwenden einer SQL-Anmeldung

    sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=<SQL user nme>;Pwd=<password>"
    

    Verwenden der Windows-Authentifizierung

    sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"
    
  2. Geben Sie an, wie die Ausgabe behandelt werden soll. Mit dem folgenden Skript wird die lokale R-Sitzung angewiesen, auf R-Auftragsergebnisse auf dem Server zu warten, bevor der nächste Vorgang verarbeitet wird. Außerdem wird so die Ausgabe von Remoteberechnungen in der lokalen Sitzung unterdrückt.

    sqlWait <- TRUE
    sqlConsoleOutput <- FALSE
    

    Das Argument wait für RxInSqlServer unterstützt diese Optionen:

    • TRUE. Der Auftrag wird als „blockiert“ konfiguriert und wird nicht zurückgegeben, bis er abgeschlossen wurde oder ein Fehler aufgetreten ist.

    • FALSE. Aufträge werden als „nicht blockierend“ konfiguriert und sofort zurückgegeben, sodass Sie weiterhin anderen R-Code ausführen können. Jedoch auch im nicht blockierenden Modus muss die Clientverbindung mit SQL Server aufrechterhalten werden, während der Auftrag ausgeführt wird.

  3. Geben Sie optional den Speicherort eines lokalen Verzeichnisses an, das von der lokalen R-Sitzung sowie vom Remotecomputer mit SQL Server und dessen Konten gemeinsam genutzt werden kann.

    sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")
    

    Wenn Sie manuell ein bestimmtes Verzeichnis zum Freigeben erstellen möchten, können Sie eine Zeile wie die folgende hinzufügen:

    dir.create(sqlShareDir, recursive = TRUE)
    
  4. Übergeben Sie Argumente an den RxInSqlServer-Konstruktor, um das Computecontextobjekt zu erstellen.

    sqlCompute <- RxInSqlServer(  
         connectionString = sqlConnString,
         wait = sqlWait,
         consoleOutput = sqlConsoleOutput)
    

    Die Syntax für RxInSqlServer ist fast identisch mit der Syntax der RxSqlServerData-Funktion, die Sie zuvor zum Definieren der Datenquelle verwendet haben. Es gibt jedoch auch wichtige Unterschiede.

    • Das Datenquellenobjekt (mithilfe der Funktion RxSqlServerDatadefiniert) gibt an, wo die Daten gespeichert werden.

    • Im Gegensatz dazu gibt der mit der RxInSqlServer-Funktion definierte Computekontext an, wo Aggregationen und andere Berechnungen durchgeführt werden.

    Das Definieren eines Computekontexts wirkt sich nicht auf andere generische R-Berechnungen aus, die Sie auf Ihrer Arbeitsstation ausführen können, und ändert nicht die Quelle der Daten. Sie können z.B. eine lokale Textdatei als Datenquelle definieren, aber SQL Server als Computekontext verwenden und alle Lesevorgänge und Zusammenfassungen der Daten auf dem SQL Server-Computer ausführen.

  5. Aktivieren Sie den Remote-Compute-Kontext.

    rxSetComputeContext(sqlCompute)
    
  6. Geben Sie Informationen über den Computekontext einschließlich der zugehörigen Eigenschaften zurück.

    rxGetComputeContext()
    
  7. Setzen Sie den Compute-Kontext durch Angabe des Schlüsselworts „local“ wieder auf den lokalen Computer zurück (im nächsten Tutorial wird die Verwendung des Remote-Compute-Kontexts demonstriert).

    rxSetComputeContext("local")
    

Tipp

Sie erhalten eine Liste der Schlüsselwörter, die von dieser Funktion unterstützt werden, indem Sie help("rxSetComputeContext") in der Befehlszeile von R eingeben.

Ablaufverfolgung aktivieren

Es kann vorkommen, dass Vorgänge, die in Ihrem lokalen Kontext funktionieren, jedoch Probleme bei der Ausführung in einem Remotecomputekontext haben. Wenn Sie Probleme analysieren oder die Leistung überwachen möchten, können Sie das Tracing im Compute-Kontext aktivieren, um die Fehlerbehebung zur Laufzeit zu unterstützen.

  1. Erstellen Sie einen neuen Computekontext, der die gleiche Verbindungszeichenfolge verwendet, aber fügen Sie dem RxInSqlServer-Konstruktor die Argumente traceEnabled und traceLevel hinzu.

    sqlComputeTrace <- RxInSqlServer(
        connectionString = sqlConnString,
        #shareDir = sqlShareDir,
        wait = sqlWait,
        consoleOutput = sqlConsoleOutput,
        traceEnabled = TRUE,
        traceLevel = 7)
    

    In diesem Beispiel ist traceLevel auf 7 gesetzt, d.h. „alle Ablaufverfolgungsinformationen anzeigen“.

  2. Verwenden Sie die rxSetComputeContext-Funktion, um den für die Ablaufverfolgung aktivierten Computekontext anhand des Namens anzugeben.

    rxSetComputeContext(sqlComputeTrace)
    

Nächster Schritt

Erfahren Sie, wie Sie Rechenkontexte wechseln, um R-Code auf dem Server oder lokal auszuführen.