Verplaats gegevens tussen SQL Server en XDF-bestand (SQL Server en RevoScaleR-tutorial)

Van toepassing op: SQL Server 2016 (13.x) en latere versies

Dit is tutorial 13 uit de RevoScaleR-tutorialserie over hoe je RevoScaleR-functies gebruikt met SQL Server.

In deze tutorial leer je hoe je een XDF-bestand gebruikt om data over te dragen tussen externe en lokale rekencontexten. Door de data op te slaan in een XDF-bestand, kun je transformaties uitvoeren op de data.

Als je klaar bent, gebruik je de data in het bestand om een nieuwe SQL Server-tabel aan te maken. De functie rxDataStep kan transformaties op de data toepassen en voert de conversie uit tussen dataframes en .xdf-bestanden.

Maak een SQL Server-tabel aan vanuit een XDF-bestand

Voor deze oefening gebruik je opnieuw de creditcardfraudegegevens. In dit scenario is u gevraagd om extra analyses te doen van gebruikers in de staten Californië, Oregon en Washington. Om efficiënter te zijn, heb je besloten om alleen gegevens voor deze toestanden op je lokale computer op te slaan en alleen te werken met de variabelen geslacht, kaarthouder, staat en balans.

  1. Hergebruik de stateAbb variabele die je eerder hebt gemaakt om de levels te identificeren die je moet opnemen en schrijf ze naar een nieuwe variabele, statesToKeep.

    statesToKeep <- sapply(c("CA", "OR", "WA"), grep, stateAbb)
    statesToKeep
    

    Results

    CA OR WA
    5 38 48
  2. Definieer de data die je van SQL Server wilt overhalen met een Transact-SQL query. Later gebruik je deze variabele als het inData-argument voor rxImport.

    importQuery <- paste("SELECT gender,cardholder,balance,state FROM",  sqlFraudTable,  "WHERE (state = 5 OR state = 38 OR state = 48)")
    

    Zorg ervoor dat er geen verborgen tekens, zoals regeleinden of tabtekens, in de query staan.

  3. Definieer vervolgens de kolommen die gebruikt moeten worden bij het werken met de data in R. In de kleinere dataset heb je bijvoorbeeld slechts drie factorniveaus nodig, omdat de query data geeft voor slechts drie toestanden. Pas de variabele statesToKeep toe om de juiste niveaus te identificeren.

    importColInfo <- list(
        gender = list( type = "factor",  levels = c("1", "2"), newLevels = c("Male", "Female")),
        cardholder = list(  type = "factor",  levels = c("1", "2"), newLevels = c("Principal", "Secondary")),
        state = list(   type = "factor",  levels = as.character(statesToKeep), newLevels = names(statesToKeep))
            )
    
  4. Zet de rekencontext op lokaal, omdat je alle data op je lokale computer wilt hebben.

    rxSetComputeContext("local")
    

    De rxImport-functie kan gegevens importeren van elke ondersteunde databron naar een lokaal XDF-bestand. Het gebruik van een lokale kopie van de data is handig als je veel verschillende analyses op de data wilt doen, maar wilt voorkomen dat je steeds dezelfde query uitvoert.

  5. Maak het databronobject aan door de eerder gedefinieerde variabelen als argumenten door te geven aan RxSqlServerData.

    sqlServerImportDS <- RxSqlServerData(
        connectionString = sqlConnString,
        sqlQuery = importQuery,
        colInfo = importColInfo)
    
  6. Roep rxImport aan om de gegevens te schrijven naar een bestand genaamd ccFraudSub.xdf, in de huidige werkmap.

    localDS <- rxImport(inData = sqlServerImportDS,
        outFile = "ccFraudSub.xdf",
        overwrite = TRUE)
    

    Het localDs object dat door de rxImport-functie wordt teruggegeven, is een lichtgewicht RxXdfData-databronobject dat het gegevensbestand vertegenwoordigt dat ccFraud.xdf lokaal op de schijf is opgeslagen.

  7. Bel rxGetVarInfo op het XDF-bestand om te verifiëren dat het dataschema hetzelfde is.

    rxGetVarInfo(data = localDS)
    

    Results

    rxGetVarInfo(data = localDS)
    Var 1: gender, Type: factor, no factor levels available
    Var 2: cardholder, Type: factor, no factor levels available
    Var 3: balance, Type: integer, Low/High: (0, 22463)
    Var 4: state, Type: factor, no factor levels available
    
  8. Je kunt nu verschillende R-functies aanroepen om het localDs-object te analyseren, net zoals je dat zou doen met de brongegevens op SQL Server. Je kunt bijvoorbeeld samenvatten op geslacht:

    rxSummary(~gender + cardholder + balance + state, data = localDS)
    

Volgende stap

Deze tutorial sluit de meerdelige tutorialserie over RevoScaleR en SQL Server af. Het introduceerde je in tal van datagerelateerde en computationele concepten, waardoor je een basis kreeg om verder te gaan met je eigen data- en projectbehoeften.

Om je kennis van RevoScaleR te verdiepen, kun je terugkeren naar de R-tutoriallijst om eventuele oefeningen die je misschien hebt gemist door te lopen. Of bekijk de How-to artikelen in de inhoudsopgave voor informatie over algemene taken.