Definire e usare i contesti di calcolo (esercitazione su SQL Server e RevoScaleR)
Si applica a: SQL Server 2016 (13.x) e versioni successive
Questa è l'esercitazione 4 della serie di esercitazioni per RevoScaleR dedicate all'uso delle funzioni di RevoScaleR con SQL Server.
Nell'esercitazione precedente sono state usate le funzioni di RevoScaleR per esaminare gli oggetti dati. In questa esercitazione viene presentata la funzione RxInSqlServer, che consente di definire un contesto di calcolo per un computer SQL Server remoto. Con un contesto di calcolo remoto è possibile spostare l'esecuzione di R da una sessione locale a una sessione remota sul server.
- Apprendere gli elementi di un contesto di calcolo di SQL Server remoto
- Abilitare la traccia in un oggetto contesto di calcolo
RevoScaleR supporta più contesti di calcolo: Hadoop, Spark in HDFS e SQL Server nel database. Per SQL Server, la funzione RxInSqlServer viene usata per le connessioni al server e il passaggio di oggetti tra il computer locale e il contesto di esecuzione remota.
Creare e impostare un contesto di calcolo
La funzione RxInSqlServer che crea il contesto di calcolo di SQL Server usa le informazioni seguenti:
- Stringa di connessione per l'istanza di SQL Server
- Specifica della modalità di gestione dell'output
- Specifica facoltativa di una directory di dati condivisa
- Argomenti facoltativi che abilitano la traccia o specificano il livello di traccia
Questa sezione illustra nel dettaglio ogni parte.
Specificare la stringa di connessione per l'istanza in cui vengono eseguiti i calcoli. È possibile riutilizzare la stringa di connessione creata in precedenza.
Uso di un account di accesso SQL
sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=<SQL user nme>;Pwd=<password>"
Uso dell'autenticazione di Windows
sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"
Specificare il modo in cui si vuole gestire l'output. Lo script seguente indica alla sessione di R locale di attendere i risultati del processo R nel server prima di elaborare l'operazione successiva. Evita anche che l'output dei calcoli remoti venga visualizzato nella sessione locale.
sqlWait <- TRUE sqlConsoleOutput <- FALSE
L'argomento wait per RxInSqlServer supporta queste opzioni:
TRUE. Il processo è configurato in modalità di blocco e non restituisce risultati finché non viene completato o non ha esito negativo.
FALSE. I processi sono configurati in modalità non di blocco e restituiscono immediatamente risultati, consentendo di continuare a eseguire altro codice R. Tuttavia, anche in modalità non di blocco, la connessione client con SQL Server deve essere mantenuta durante l'esecuzione del processo.
Se si vuole, specificare il percorso di una directory locale per l'uso condiviso da parte della sessione R locale e del computer SQL Server remoto e dei relativi account.
sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")
Se si vuole creare manualmente una directory specifica per la condivisione, è possibile aggiungere una riga simile alla seguente:
dir.create(sqlShareDir, recursive = TRUE)
Passare argomenti al costruttore RxInSqlServer per creare l'oggetto contesto di calcolo.
sqlCompute <- RxInSqlServer( connectionString = sqlConnString, wait = sqlWait, consoleOutput = sqlConsoleOutput)
La sintassi per RxInSqlServer è quasi identica a quella della funzione RxSqlServerData usata in precedenza per definire l'origine dati. Tuttavia, esistono alcune differenze importanti:
L'oggetto origine dati definito usando la funzione RxSqlServerDataspecifica la posizione in cui vengono archiviati i dati.
Il contesto di calcolo definito usando la funzione RxInSqlServer indica invece la posizione in cui eseguire le aggregazioni e altri calcoli.
La definizione di un contesto di calcolo non influenza gli altri calcoli generici di R che possono essere eseguiti nella workstation e non modifica l'origine dei dati. Ad esempio, è possibile definire un file di testo locale come origine dati ma modificare il contesto di calcolo in SQL Server ed effettuare tutte le letture e i riepiloghi nei dati nel computer SQL Server.
Attivare il contesto di calcolo remoto.
rxSetComputeContext(sqlCompute)
Restituire informazioni sul contesto di calcolo, incluse le relative proprietà.
rxGetComputeContext()
Reimpostare il contesto di calcolo sul computer locale specificando la parola chiave "local" (l'esercitazione successiva illustra l'uso del contesto di calcolo remoto).
rxSetComputeContext("local")
Suggerimento
Per l'elenco delle parole chiave supportate da questa funzione digitare help("rxSetComputeContext")
da una riga di comando di R.
Abilitare la traccia
A volte le operazioni vengono eseguite correttamente nel contesto locale ma si verificano problemi quando vengono eseguite in un contesto di calcolo remoto. Per analizzare i problemi o monitorare le prestazioni, è possibile abilitare la traccia nel contesto di calcolo per supportare la risoluzione dei problemi in fase di esecuzione.
Creare un nuovo contesto di calcolo che usa la stessa stringa di connessione, ma aggiungere gli argomenti traceEnabled e traceLevel al costruttore RxInSqlServer.
sqlComputeTrace <- RxInSqlServer( connectionString = sqlConnString, #shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput, traceEnabled = TRUE, traceLevel = 7)
Nell'esempio la proprietà traceLevel è impostata su 7, ovvero sulla visualizzazione di tutte le informazioni di traccia.
Usare la funzione rxSetComputeContext per specificare il contesto di calcolo abilitato per la traccia per nome.
rxSetComputeContext(sqlComputeTrace)
Passaggi successivi
Informazioni su come cambiare contesto di calcolo per eseguire il codice R sul server o in locale.