Skapa SQL Server-dataobjekt med RxSqlServerData (självstudiekurs om SQL Server och RevoScaleR)
gäller för: SQL Server 2016 (13.x) och senare versioner
Det här är självstudiekurs 2 i RevoScaleR-självstudieserien om hur du använder RevoScaleR-funktioner med SQL Server.
Den här självstudien är en fortsättning på skapandet av databaser: att lägga till tabeller och ladda data. Om en DBA har skapat databasen och loggat in i självstudiekurstvå, kan du lägga till tabeller med en R IDE som RStudio eller ett inbyggt verktyg som Rgui.
Anslut till SQL Server från R och använd funktionerna RevoScaleR för att utföra följande uppgifter:
- Skapa tabeller för träningsdata och förutsägelser
- Läsa in tabeller med data från en lokal .csv fil
Exempeldata är simulerade kreditkortsbedrägeridata (ccFraud-datamängden), partitionerade i tränings- och bedömningsdatauppsättningar. Datafilen ingår i RevoScaleR.
Använd en R IDE- eller Rgui- för att slutföra dessa uppgifter. Se till att använda R-körbara filer som finns på den här platsen: C:\Program Files\Microsoft\R Client\R_SERVER\bin\x64 (either Rgui.exe om du använder verktyget eller en R IDE som pekar på C:\Program Files\Microsoft\R Client\R_SERVER). Att ha en R-klientarbetsstation med dessa körbara filer är en förutsättning som anses nödvändig för denna handledning.
Skapa träningsdatatabellen
Lagra databasanslutningssträngen i en R-variabel. Nedan visas två exempel på giltiga ODBC-anslutningssträngar för SQL Server: en med en SQL-inloggning och ett för Windows-integrerad autentisering.
Se till att ändra servernamnet, användarnamnet och lösenordet efter behov.
SQL-inloggning
sqlConnString <- "Driver=SQL Server;Server=<server-name>; Database=RevoDeepDive;Uid=<user_name>;Pwd=<password>"
Windows-autentisering
sqlConnString <- "Driver=SQL Server;Server=<server-name>;Database=RevoDeepDive;Trusted_Connection=True"
Ange namnet på den tabell som du vill skapa och spara den i en R-variabel.
sqlFraudTable <- "ccFraudSmall"
Eftersom serverinstansen och databasnamnet redan har angetts som en del av anslutningssträngen blir det fullständigt kvalificerade namnet på den nya tabellen instance.database.schema.ccFraudSmall.
Du kan också ange raderPerRead för att styra hur många rader med data som läss i varje batch.
sqlRowsPerRead = 5000
Även om den här parametern är valfri kan inställningen resultera i effektivare beräkningar. De flesta förbättrade analysfunktionerna i RevoScaleR och MicrosoftML bearbeta data i segment. Parametern rowsPerRead avgör antalet rader i varje segment.
Du kan behöva experimentera med den här inställningen för att hitta rätt balans. Om värdet är för stort kan dataåtkomsten vara långsam om det inte finns tillräckligt med minne för att bearbeta data i segment av den storleken. Om värdet för raderPerRead är för litet i vissa system kan prestandan också försämras.
Som ett initialt värde använder du standardstorleken för batchprocess som definierats av databasmotorinstansen för att styra antalet rader i varje segment (5 000 rader). Spara värdet i variabeln sqlRowsPerRead.
Definiera en variabel för det nya datakällobjektet och skicka argumenten som tidigare definierats till RxSqlServerData konstruktorn. Observera att detta endast skapar datakällans objekt och inte fyller i det. Att läsa in data är ett separat steg.
sqlFraudDS <- RxSqlServerData(connectionString = sqlConnString, table = sqlFraudTable, rowsPerRead = sqlRowsPerRead)
Skapa bedömningsdatatabellen
Med samma steg skapar du tabellen som innehåller bedömningsdata med samma process.
Skapa en ny R-variabel, sqlScoreTable, för att lagra namnet på tabellen som används för bedömning.
sqlScoreTable <- "ccFraudScoreSmall"
Ange variabeln som ett argument för funktionen RxSqlServerData för att definiera ett andra datakällobjekt sqlScoreDS.
sqlScoreDS <- RxSqlServerData(connectionString = sqlConnString, table = sqlScoreTable, rowsPerRead = sqlRowsPerRead)
Eftersom du redan har definierat anslutningssträngen och andra parametrar som variabler i R-arbetsytan kan du återanvända den för nya datakällor som representerar olika tabeller, vyer eller frågor.
Notis
Funktionen använder olika argument för att definiera en datakälla baserat på en hel tabell än för en datakälla baserat på en fråga. Det beror på att SQL Server-databasmotorn måste förbereda frågorna på ett annat sätt. Senare i den här handledningen får du lära dig hur du skapar en datakälla baserad på en SQL-fråga.
Läsa in data i SQL-tabeller med R
Nu när du har skapat SQL Server-tabellerna kan du läsa in data i dem med lämplig Rx- funktion.
RevoScaleR--paketet innehåller funktioner som är specifika för datakällans typer. För textdata använder du RxTextData för att generera datakällans objekt. Det finns ytterligare funktioner för att skapa datakällobjekt från Hadoop-data, ODBC-data och så vidare.
Not
För det här avsnittet måste du ha Kör DDL- behörigheter för databasen.
Ladda in data i träningstabellen
Skapa en R-variabel, ccFraudCsvoch tilldela till variabeln filsökvägen för CSV-filen som innehåller exempeldata. Den här datamängden finns i RevoScaleR. "sampleDataDir" är ett nyckelord i funktionen rxGetOption.
ccFraudCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudSmall.csv")
Observera anropet till rxGetOption, som är GET-metoden som är associerad med rxOptions i RevoScaleR. Använd det här verktyget för att ange och lista alternativ som rör lokala och fjärranslutna beräkningskontexter, till exempel den delade standardkatalogen eller antalet processorer (kärnor) som ska användas i beräkningar.
Det här anropet hämtar exemplen från rätt bibliotek, oavsett var du kör koden. Prova till exempel att köra funktionen på SQL Server och på utvecklingsdatorn och se hur sökvägarna skiljer sig åt.
Definiera en variabel för att lagra nya data och använd funktionen RxTextData för att ange textdatakällan.
inTextData <- RxTextData(file = ccFraudCsv, colClasses = c( "custID" = "integer", "gender" = "integer", "state" = "integer", "cardholder" = "integer", "balance" = "integer", "numTrans" = "integer", "numIntlTrans" = "integer", "creditLine" = "integer", "fraudRisk" = "integer"))
Argumentet colClasses är viktigt. Du använder den för att ange vilken datatyp som ska tilldelas till varje kolumn med data som läses in från textfilen. I det här exemplet hanteras alla kolumner som text, förutom de namngivna kolumnerna, som hanteras som heltal.
Nu kanske du vill pausa en stund och visa databasen i SQL Server Management Studio. Uppdatera listan över tabeller i databasen.
Du kan se att även om R-dataobjekten har skapats på din lokala arbetsyta har tabellerna inte skapats i SQL Server-databasen. Dessutom har inga data lästs in från textfilen till R-variabeln.
Infoga data genom att anropa funktionen rxDataStep funktion.
rxDataStep(inData = inTextData, outFile = sqlFraudDS, overwrite = TRUE)
Om du inte har några problem med anslutningssträngen bör du efter en kort paus se resultat som dessa:
Totalt antal rader skrivna: 10000, Total tid: 0,466Rader Läs: 1 0000, Totalt antal bearbetade rader: 1 0000, Total segmenttid: 0,577 sekunder
Uppdatera listan över tabeller. Om du vill kontrollera att varje variabel har rätt datatyper och har importerats kan du också högerklicka på tabellen i SQL Server Management Studio och välja Välj de 1 000 översta raderna.
Ladda upp data i bedömningstabellen
Upprepa stegen för att läsa in datauppsättningen som används för bedömning i databasen.
Börja med att ange sökvägen till källfilen.
ccScoreCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudScoreSmall.csv")
Använd funktionen RxTextData för att hämta data och spara dem i variabeln inTextData.
inTextData <- RxTextData(file = ccScoreCsv, colClasses = c( "custID" = "integer", "gender" = "integer", "state" = "integer", "cardholder" = "integer", "balance" = "integer", "numTrans" = "integer", "numIntlTrans" = "integer", "creditLine" = "integer"))
Anropa funktionen rxDataStep för att skriva över den aktuella tabellen med det nya schemat och data.
rxDataStep(inData = inTextData, sqlScoreDS, overwrite = TRUE)
Argumentet inData definierar vilken datakälla som ska användas.
Argumentet outFile anger tabellen i SQL Server där du vill spara data.
Om tabellen redan finns och du inte använder alternativet ersätt infogas resultaten utan att trunkeras.
Om anslutningen lyckades bör du återigen se ett meddelande som anger slutförande och den tid som krävs för att skriva data till tabellen:
Totalt antal rader skrivna: 10000, Total tid: 0,384Rader Läs: 1 0000, Totalt antal bearbetade rader: 1 0000, Total segmenttid: 0,456 sekunder
Mer om rxDataStep
rxDataStep är en kraftfull funktion som kan utföra flera transformeringar på en R-dataram. Du kan också använda rxDataStep för att konvertera data till den representation som krävs av målet: i det här fallet SQL Server.
Valfritt kan du specificera transformationer på data genom att använda R-funktioner i argumenten till rxDataStep. Exempel på dessa operationer ges senare i den här handledningen.