Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Dit is tutorial 4 van de RevoScaleR-tutorialserie over hoe je RevoScaleR-functies gebruikt met SQL Server.
In de vorige tutorial gebruikte je RevoScaleR-functies om dataobjecten te inspecteren. Deze tutorial introduceert de functie RxInSqlServer, waarmee je een rekencontext kunt definiëren voor een externe SQL Server. Met een remote compute-context kun je de R-uitvoering van een lokale sessie naar een remote sessie op de server verplaatsen.
- Leer de elementen van een externe SQL Server-computecontext
- Schakel tracering in voor een computecontext-object
RevoScaleR ondersteunt meerdere computecontexten: Hadoop, Spark op HDFS en SQL Server in-database. Voor SQL Server wordt de functie RxInSqlServer gebruikt voor serververbindingen en het doorgeven van objecten tussen de lokale computer en de externe uitvoeringscontext.
Maak een computecontext aan en stel die in
De functie RxInSqlServer die de SQL Server compute-context creëert, gebruikt de volgende informatie:
- Verbindingsstring voor de SQL Server-instantie
- Specificatie van hoe output moet worden behandeld
- Optionele specificatie van een gedeelde datamap
- Optionele argumenten die traceren mogelijk maken of het trace-niveau specificeren
Deze sectie leidt je door elk onderdeel.
Specificeer de verbindingsreeks voor de instantie waar berekeningen worden uitgevoerd. Je kunt de verbindingsreeks die je eerder hebt aangemaakt hergebruiken.
Met een SQL-login
sqlConnString <- "Driver=SQL Server;Server=<SQL Server instance name>; Database=<database name>;Uid=<SQL user nme>;Pwd=<password>"Gebruik van Windows authentication
sqlConnString <- "Driver=SQL Server;Server=instance_name;Database=RevoDeepDive;Trusted_Connection=True"Specificeer hoe je wilt dat de output wordt afgehandeld. Het volgende script stuurt de lokale R-sessie om te wachten op R-taakresultaten op de server voordat de volgende bewerking wordt verwerkt. Het voorkomt ook dat uitvoer van externe berekeningen in de lokale sessie verschijnt.
sqlWait <- TRUE sqlConsoleOutput <- FALSEHet wachtargument voor RxInSqlServer ondersteunt deze opties:
WAAR. De taak is geconfigureerd als blokkerend en keert pas terug als deze is voltooid of is mislukt.
ONJUIST. Taken zijn geconfigureerd als niet-blokkerend en keren direct terug, zodat je andere R-code kunt blijven uitvoeren. Echter, zelfs in niet-blokkerende modus moet de clientverbinding met SQL Server worden onderhouden terwijl de taak draait.
Optioneel specificeer je de locatie van een lokale map voor gedeeld gebruik door de lokale R-sessie en door de externe SQL Server-computer en zijn accounts.
sqlShareDir <- paste("c:\\AllShare\\", Sys.getenv("USERNAME"), sep="")Als je handmatig een specifieke map wilt aanmaken om te delen, kun je een regel toevoegen als volgt:
dir.create(sqlShareDir, recursive = TRUE)Geef argumenten door aan de RxInSqlServer-constructor om het compute-contextobject te creëren.
sqlCompute <- RxInSqlServer( connectionString = sqlConnString, wait = sqlWait, consoleOutput = sqlConsoleOutput)De syntaxis van RxInSqlServer ziet er bijna identiek uit aan die van de RxSqlServerData-functie die je eerder gebruikte om de databron te definiëren. Er zijn echter enkele belangrijke verschillen.
Het databronobject, gedefinieerd met de functie RxSqlServerData, specificeert waar de data wordt opgeslagen.
Daarentegen geeft de rekencontext, gedefinieerd met de functie RxInSqlServer , aan waar aggregaties en andere berekeningen moeten plaatsvinden.
Het definiëren van een computecontext beïnvloedt geen andere generieke R-berekeningen die je op je werkstation zou kunnen uitvoeren, en verandert de bron van de data niet. Je zou bijvoorbeeld een lokaal tekstbestand als databron kunnen definiëren, maar de rekencontext kunnen wijzigen naar SQL Server en al je leeswerk en samenvattingen doen op de data op de SQL Server-computer.
Activeer de externe rekencontext.
rxSetComputeContext(sqlCompute)Geef informatie terug over de rekencontext, inclusief de eigenschappen ervan.
rxGetComputeContext()Reset de rekencontext terug naar de lokale computer door het sleutelwoord "local" op te geven (de volgende tutorial demonstreert het gebruik van de remote compute context).
rxSetComputeContext("local")
Tip
Voor een lijst met andere trefwoorden die door deze functie worden ondersteund, typt u help("rxSetComputeContext") op een R-opdrachtregel.
Tracering inschakelen
Soms werken operaties in je lokale context, maar hebben ze problemen bij het draaien in een remote compute-context. Als je problemen wilt analyseren of prestaties wilt monitoren, kun je tracing inschakelen in de computecontext om run-time probleemoplossing te ondersteunen.
Maak een nieuwe computecontext aan die dezelfde verbindingsreeks gebruikt, maar voeg de argumenten traceEnabled en traceLevel toe aan de RxInSqlServer-constructor.
sqlComputeTrace <- RxInSqlServer( connectionString = sqlConnString, #shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput, traceEnabled = TRUE, traceLevel = 7)In dit voorbeeld staat de traceLevel-eigenschap op 7, wat betekent "toon alle traceerinformatie."
Gebruik de functie rxSetComputeContext om de door tracing ingeschakelde rekencontext op naam te specificeren.
rxSetComputeContext(sqlComputeTrace)
Volgende stap
Leer hoe je rekencontexten kunt wisselen om R-code op de server of lokaal uit te voeren.