Sql Server-gegevensobjecten maken met rxSqlServerData (SQL Server en RevoScaleR-zelfstudie)
Van toepassing op: SQL Server 2016 (13.x) en latere versies
Dit is zelfstudie 2 van de reeks RevoScaleR-zelfstudies over het gebruik van RevoScaleR-functies met SQL Server.
Deze zelfstudie is een vervolg van het maken van databases: tabellen toevoegen en gegevens laden. Als een DBA de database en inloggegevens in handleiding tweeheeft aangemaakt, kunt u tabellen toevoegen met behulp van een R IDE zoals RStudio of een ingebouwde tool zoals Rgui.
Maak vanuit R verbinding met SQL Server en gebruik RevoScaleR--functies om de volgende taken uit te voeren:
- Tabellen maken voor trainingsgegevens en voorspellingen
- Tabellen laden met gegevens uit een lokaal .csv-bestand
Voorbeeldgegevens zijn gesimuleerde creditcardfraudegegevens (de ccFraud-gegevensset), gepartitioneerd in trainings- en scoregegevenssets. Het gegevensbestand is opgenomen in RevoScaleR-.
Gebruik een R IDE of Rgui- om deze taken uit te voeren. Zorg ervoor dat u de R-uitvoerbare bestanden op deze locatie gebruikt: C:\Program Files\Microsoft\R Client\R_SERVER\bin\x64 (either Rgui.exe als u dat hulpprogramma gebruikt of een R IDE die verwijst naar C:\Program Files\Microsoft\R Client\R_SERVER). Het beschikken over een R-client werkstation met deze uitvoerbare bestanden wordt beschouwd als een vereiste voor deze handleiding.
De tabel met trainingsgegevens maken
Sla de databaseverbindingsreeks op in een R-variabele. Hieronder ziet u twee voorbeelden van geldige ODBC-verbindingsreeksen voor SQL Server: één met behulp van een SQL-aanmelding en één voor geïntegreerde Windows-verificatie.
Zorg ervoor dat u de servernaam, gebruikersnaam en het wachtwoord zo nodig wijzigt.
SQL-aanmelding
sqlConnString <- "Driver=SQL Server;Server=<server-name>; Database=RevoDeepDive;Uid=<user_name>;Pwd=<password>"
Windows-verificatie
sqlConnString <- "Driver=SQL Server;Server=<server-name>;Database=RevoDeepDive;Trusted_Connection=True"
Geef de naam op van de tabel die u wilt maken en sla deze op in een R-variabele.
sqlFraudTable <- "ccFraudSmall"
Omdat de serverinstantie en databasenaam al zijn opgegeven als onderdeel van de verbindingsreeks, wordt de volledig gekwalificeerde naam van de nieuwe tabel instance.database.schema.ccFraudSmall.
Geef desgewenst rowsPerRead op om te bepalen hoeveel rijen gegevens in elke batch worden gelezen.
sqlRowsPerRead = 5000
Hoewel deze parameter optioneel is, kan het instellen tot efficiëntere berekeningen leiden. De meeste verbeterde analytische functies in RevoScaleR- en MicrosoftML verwerken gegevens in segmenten. De parameter rowsPerRead bepaalt het aantal rijen in elk segment.
Mogelijk moet u experimenteren met deze instelling om de juiste balans te vinden. Als de waarde te groot is, kan de gegevenstoegang traag zijn als er onvoldoende geheugen is om gegevens in segmenten van die grootte te verwerken. Omgekeerd kunnen op sommige systemen de prestaties ook verminderen als de waarde van rowsPerRead te klein is.
Gebruik als initiële waarde de standaard batchprocesgrootte die is gedefinieerd door het exemplaar van de database-engine om het aantal rijen in elk segment (5000 rijen) te bepalen. Sla deze waarde op in de variabele sqlRowsPerRead.
Definieer een variabele voor het nieuwe gegevensbronobject en geef de eerder gedefinieerde argumenten door aan de RxSqlServerData constructor. Houd er rekening mee dat hiermee alleen het gegevensbronobject wordt gemaakt en niet wordt gevuld. Het laden van gegevens is een afzonderlijke stap.
sqlFraudDS <- RxSqlServerData(connectionString = sqlConnString, table = sqlFraudTable, rowsPerRead = sqlRowsPerRead)
De scoregegevenstabel maken
Maak met dezelfde stappen de tabel met de scoregegevens met behulp van hetzelfde proces.
Maak een nieuwe R-variabele, sqlScoreTable, om de naam op te slaan van de tabel die wordt gebruikt voor scoren.
sqlScoreTable <- "ccFraudScoreSmall"
Geef die variabele op als argument voor de functie RxSqlServerData om een tweede gegevensbronobject te definiëren, sqlScoreDS-.
sqlScoreDS <- RxSqlServerData(connectionString = sqlConnString, table = sqlScoreTable, rowsPerRead = sqlRowsPerRead)
Omdat u de verbindingsreeks en andere parameters al hebt gedefinieerd als variabelen in de R-werkruimte, kunt u deze opnieuw gebruiken voor nieuwe gegevensbronnen die verschillende tabellen, weergaven of query's vertegenwoordigen.
Notitie
De functie gebruikt verschillende argumenten voor het definiëren van een gegevensbron op basis van een hele tabel dan voor een gegevensbron op basis van een query. Dit komt doordat de SQL Server-database-engine de query's anders moet voorbereiden. Verderop in deze zelfstudie leert u hoe u een gegevensbronobject maakt op basis van een SQL-query.
Gegevens laden in SQL-tabellen met behulp van R
Nu u de SQL Server-tabellen hebt gemaakt, kunt u er gegevens in laden met behulp van de juiste Rx functie.
Het RevoScaleR--pakket bevat functies die specifiek zijn voor gegevensbrontypen. Voor tekstgegevens gebruikt u RxTextData- om het gegevensbronobject te genereren. Er zijn aanvullende functies voor het maken van gegevensbronobjecten op basis van Hadoop-gegevens, ODBC-gegevens enzovoort.
Notitie
Voor deze sectie moet u DDL machtigingen voor de database uitvoeren.
Gegevens laden in de trainingstabel
Maak een R-variabele ccFraudCsven wijs deze toe aan de variabele het bestandspad voor het CSV-bestand met de voorbeeldgegevens. Deze gegevensset wordt geleverd in RevoScaleR-. "SampleDataDir" is een trefwoord op de rxGetOption functie.
ccFraudCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudSmall.csv")
Let op de aanroep van rxGetOption, de GET-methode die gekoppeld is aan rxOptions in RevoScaleR. Gebruik dit hulpprogramma om opties in te stellen en weer te geven die betrekking hebben op lokale en externe rekencontexten, zoals de standaard gedeelde map, of het aantal processors (kernen) dat moet worden gebruikt in berekeningen.
Met deze aanroep worden de voorbeelden opgehaald uit de juiste bibliotheek, ongeacht waar u uw code uitvoert. Voer bijvoorbeeld de functie uit op SQL Server en op uw ontwikkelcomputer en kijk hoe de paden verschillen.
Definieer een variabele voor het opslaan van de nieuwe gegevens en gebruik de functie RxTextData om de tekstgegevensbron op te geven.
inTextData <- RxTextData(file = ccFraudCsv, colClasses = c( "custID" = "integer", "gender" = "integer", "state" = "integer", "cardholder" = "integer", "balance" = "integer", "numTrans" = "integer", "numIntlTrans" = "integer", "creditLine" = "integer", "fraudRisk" = "integer"))
Het argument colClasses is belangrijk. U gebruikt dit om het gegevenstype aan te geven dat moet worden toegewezen aan elke kolom met gegevens die uit het tekstbestand zijn geladen. In dit voorbeeld worden alle kolommen verwerkt als tekst, met uitzondering van de benoemde kolommen, die worden verwerkt als gehele getallen.
Op dit moment wilt u misschien even pauzeren en uw database weergeven in SQL Server Management Studio. Vernieuw de lijst met tabellen in de database.
U kunt zien dat, hoewel de R-gegevensobjecten zijn gemaakt in uw lokale werkruimte, de tabellen niet zijn gemaakt in de SQL Server-database. Er zijn ook geen gegevens uit het tekstbestand in de R-variabele geladen.
Voeg de gegevens in door de functie rxDataStep functie aan te roepen.
rxDataStep(inData = inTextData, outFile = sqlFraudDS, overwrite = TRUE)
Ervan uitgaande dat er geen problemen zijn met uw verbindingsreeks, ziet u na een korte pauze de volgende resultaten:
Totaalrijen geschreven: 10000, Totale tijd: 0,466 secondenRijen gelezen: 10000, Totaalrijen verwerkt: 10000, Totale verwerkingssegmenttijd: 0,577 seconden
Vernieuw de lijst met tabellen. Als u wilt controleren of elke variabele de juiste gegevenstypen heeft en is geïmporteerd, kunt u ook met de rechtermuisknop op de tabel in SQL Server Management Studio klikken en Bovenste 1000 rijen selecterenselecteren.
Gegevens laden in de scoretabel
Herhaal de stappen voor het laden van de gegevensset die wordt gebruikt voor het scoren in de database.
Begin met het opgeven van het pad naar het bronbestand.
ccScoreCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudScoreSmall.csv")
Gebruik de functie RxTextData om de gegevens op te halen en op te slaan in de variabele, inTextData.
inTextData <- RxTextData(file = ccScoreCsv, colClasses = c( "custID" = "integer", "gender" = "integer", "state" = "integer", "cardholder" = "integer", "balance" = "integer", "numTrans" = "integer", "numIntlTrans" = "integer", "creditLine" = "integer"))
Roep de functie rxDataStep aan om de huidige tabel te overschrijven met het nieuwe schema en de nieuwe gegevens.
rxDataStep(inData = inTextData, sqlScoreDS, overwrite = TRUE)
Het argument inData definieert de gegevensbron die moet worden gebruikt.
Met het argument outFile geeft u de tabel in SQL Server op waar u de gegevens wilt opslaan.
Als de tabel al bestaat en u de optie overschrijven niet gebruikt, worden de resultaten ingevoegd zonder truncatie.
Als de verbinding is geslaagd, ziet u opnieuw een bericht met de melding dat de voltooiing is voltooid en de tijd die nodig is om de gegevens naar de tabel te schrijven:
totaalrijen geschreven: 10000, totale tijd: 0,384rijen gelezen: 10000, totaalrijen verwerkt: 10000, totale tijd van segment: 0,456 seconden
Meer informatie over rxDataStep
rxDataStep is een krachtige functie die meerdere transformaties op een R-gegevensframe kan uitvoeren. U kunt rxDataStep ook gebruiken om gegevens te converteren naar de weergave die is vereist voor de bestemming: in dit geval SQL Server.
Optioneel kunt u transformaties op de gegevens specificeren door R-functies in de argumenten van rxDataStepte gebruiken