Vytvořte datové objekty SQL Server pomocí RxSqlServerData (tutoriál pro SQL Server a RevoScaleR)

platí pro: SQL Server 2016 (13.x) a novější verze

Toto je druhý tutoriál ze série RevoScaleR o tom, jak používat funkce RevoScaleR se SQL Server.

Tento tutoriál je pokračováním tvorby databáze: přidávání tabulek a načítání dat. Pokud databázi vytvořil DBA a přihlásil se v tutoriálu dva, můžete přidávat tabulky pomocí R IDE jako RStudio nebo vestavěného nástroje jako Rgui.

Z R se připojte k SQL Server a použijte funkce RevoScaleR k provádění následujících úkolů:

  • Vytvářejte tabulky pro trénovací data a predikce
  • Načítání tabulek s daty z lokálního .csv souboru

Ukázková data jsou simulovaná data o podvodech s kreditními kartami (datová sada ccFraud), rozdělená do tréninkových a skórovacích datových sad. Datový soubor je součástí RevoScaleR.

K dokončení těchto úkolů použijte R IDE nebo Rgui . Nezapomeňte použít spustitelné soubory R na tomto místě: C:\Program Files\Microsoft\R Client\R_SERVER\bin\x64 (either Rgui.exe pokud používáte tento nástroj, nebo R IDE ukazující na C:\Program Files\Microsoft\R Client\R_SERVER). Mít pracovní stanici klienta v R s těmito spustitelnými soubory je považováno za předpoklad tohoto tutoriálu.

Vytvořte tabulku trénovacích dat

  1. Uložte řetězec připojení k databázi do proměnné R. Níže jsou uvedeny dva příklady platných ODBC spojovacích řetězců pro SQL Server: jeden s SQL přihlášením a druhý pro integrovanou autentizaci ve Windows.

    Nezapomeňte upravit název serveru, uživatelské jméno a heslo podle potřeby.

    Přihlášení SQL

    sqlConnString <- "Driver=SQL Server;Server=<server-name>; Database=RevoDeepDive;Uid=<user_name>;Pwd=<password>"
    

    Ověřování systému Windows

    sqlConnString <- "Driver=SQL Server;Server=<server-name>;Database=RevoDeepDive;Trusted_Connection=True"
    
  2. Zadejte název tabulky, kterou chcete vytvořit, a uložit ji do proměnné R.

    sqlFraudTable <- "ccFraudSmall"
    

    Protože instance serveru a název databáze jsou již specifikovány jako součást připojovací řetězec, když sloučíte obě proměnné, plně kvalifikovaný název nové tabulky se stane instance.database.schema.ccFraudSmall.

  3. Volitelně můžete zadat rowsPerRead k určení, kolik řádků dat se načte v každé dávce.

    sqlRowsPerRead = 5000
    

    Ačkoliv je tento parametr volitelný, jeho nastavení může vést k efektivnějším výpočtům. Většina vylepšených analytických funkcí v RevoScaleR a MicrosoftML zpracovává data po částech. Parametr rowsPerRead určuje počet řádků v každém bloku.

    Možná budete muset s tímto nastavením experimentovat, abyste našli správnou rovnováhu. Pokud je hodnota příliš velká, přístup k datům může být pomalý, pokud není dostatek paměti pro zpracování dat v blocích této velikosti. Naopak, na některých systémech, pokud je hodnota rowsPerRead příliš malá, se může také snížit výkon.

    Jako počáteční hodnotu použijte výchozí velikost dávkového procesu definovanou instancí databázového enginu pro kontrolu počtu řádků v každém bloku (5 000 řádků). Uložit tuto hodnotu do proměnné sqlRowsPerRead.

  4. Definujte proměnnou pro nový objekt zdroje dat a předejte dříve definované argumenty konstruktoru RxSqlServerData . Všimněte si, že tím se vytvoří pouze objekt zdrojového data a nenaplní ho. Načítání dat je samostatný krok.

    sqlFraudDS <- RxSqlServerData(connectionString = sqlConnString,
       table = sqlFraudTable,
       rowsPerRead = sqlRowsPerRead)
    

Vytvořte datovou tabulku hodnocení

Stejnými kroky vytvořte tabulku, která obsahuje skórovací data stejným způsobem.

  1. Vytvořte novou proměnnou v R, sqlScoreTable, která uloží název tabulky používané pro skórování.

    sqlScoreTable <- "ccFraudScoreSmall"
    
  2. Tuto proměnnou uveďte jako argument pro funkci RxSqlServerData pro definování druhého objektu zdroje, sqlScoreDS.

    sqlScoreDS <- RxSqlServerData(connectionString = sqlConnString,
       table = sqlScoreTable, rowsPerRead = sqlRowsPerRead)
    

Protože jste již definovali připojovací řetězec a další parametry jako proměnné v pracovním prostoru R, můžete je znovu použít pro nové datové zdroje reprezentující různé tabulky, pohledy nebo dotazy.

Poznámka:

Funkce používá jiné argumenty pro definování datového zdroje založeného na celé tabulce než pro datový zdroj založený na dotazu. Je to proto, že databázový engine SQL Server musí dotazy připravovat jinak. Později v tomto tutoriálu se naučíte, jak vytvořit objekt datového zdroje na základě SQL dotazu.

Načítání dat do SQL tabulek pomocí R

Nyní, když máte vytvořené tabulky SQL Server, můžete do nich nahrát data pomocí příslušné funkce Rx.

Balíček RevoScaleR obsahuje funkce specifické pro typy datových zdrojů. Pro textová data použijte RxTextData k vygenerování objektu zdroje. Existují další funkce pro vytváření objektů zdrojů dat z Hadoop dat, ODBC dat a podobně.

Poznámka:

Pro tuto sekci musíte mít v databázi oprávnění Execute DDL .

Načíst data do trénovací tabulky

  1. Vytvořte proměnnou R ccFraudCsv a přiřaďte proměnné cestu k souboru CSV obsahujícímu ukázková data. Tato datová sada je poskytována v RevoScaleR. "sampleDataDir" je klíčové slovo ve funkci rxGetOption .

    ccFraudCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudSmall.csv")
    

    Všimněte si volání rxGetOption, což je metoda GET spojená s rxOptions v RevoScaleR. Použijte tento nástroj k nastavení a seznamu možností souvisejících s lokálními a vzdálenými výpočetními kontexty, například výchozím sdíleným adresářem nebo počtem procesorů (jader) pro použití při výpočtech.

    Tento konkrétní hovor získá vzorky ze správné knihovny, bez ohledu na to, kde kód spouštíte. Například zkuste spustit funkci na SQL Server i na vývojovém počítači a podívejte se, jak se cesty liší.

  2. Definujte proměnnou pro uložení nových dat a použijte funkci RxTextData k určení zdroje textových dat.

    inTextData <- RxTextData(file = ccFraudCsv,      colClasses = c(
        "custID" = "integer", "gender" = "integer", "state" = "integer",
        "cardholder" = "integer", "balance" = "integer",
        "numTrans" = "integer",
        "numIntlTrans" = "integer", "creditLine" = "integer",
        "fraudRisk" = "integer"))
    

    Argument colClasses je důležitý. Používáte ho k označení datového typu, který je třeba přiřadit ke každému sloupci dat načtených z textového souboru. V tomto příkladu jsou všechny sloupce zpracovávány jako text, kromě pojmenovaných sloupců, které jsou zpracovávány jako celá čísla.

  3. V tuto chvíli možná budete chtít na chvíli pauzovat a podívat se na svou databázi v SQL Server Management Studio. Obnovte seznam tabulek v databázi.

    Vidíte, že i když byly datové objekty R vytvořeny ve vašem lokálním pracovním prostoru, tabulky nebyly vytvořeny v databázi SQL Server. Také nebyla z textového souboru načtena žádná data do proměnné R.

  4. Data vložte voláním funkce rxDataStep funkce.

    rxDataStep(inData = inTextData, outFile = sqlFraudDS, overwrite = TRUE)
    

    Pokud s vaším připojovací řetězec nemáte žádné problémy, po krátké pauze byste měli vidět výsledky jako tyto:

    Celkový počet napsaných řádků: 10000, celkový čas: 0,466přečtených řádků: 10000, Celkový počet zpracovaných řádků: 10000, Celkový čas bloku: 0,577 sekundy

  5. Obnovte seznam tabulek. Pro ověření, že každá proměnná má správné datové typy a byla úspěšně importována, můžete také pravým kliknutím kliknout na tabulku v SQL Server Management Studio a vybrat Vybrat Top 1000 řádků.

Načíst data do skórovací tabulky

  1. Opakujte kroky pro načtení datové sady použité pro skórování do databáze.

    Začněte tím, že uvedete cestu ke zdrojovému souboru.

    ccScoreCsv <- file.path(rxGetOption("sampleDataDir"), "ccFraudScoreSmall.csv")
    
  2. Použijte funkci RxTextData pro získání dat a uložení do proměnné inTextData.

    inTextData <- RxTextData(file = ccScoreCsv,      colClasses = c(
        "custID" = "integer", "gender" = "integer", "state" = "integer",
        "cardholder" = "integer", "balance" = "integer",
        "numTrans" = "integer",
        "numIntlTrans" = "integer", "creditLine" = "integer"))
    
  3. Zavolejte funkci rxDataStep pro přepsání aktuální tabulky novým schématem a daty.

    rxDataStep(inData = inTextData, sqlScoreDS, overwrite = TRUE)
    
    • Argument inData definuje zdroj dat, který se používá k použití.

    • Argument outFile specifikuje tabulku v SQL Server, kam chcete data uložit.

    • Pokud tabulka už existuje a nepoužijete možnost přepsání , výsledky se vloží bez ořezání.

Opět, pokud bylo spojení úspěšné, měli byste vidět zprávu o dokončení a dobu potřebnou k zápisu dat do tabulky:

Celkový počet zapsaných řádků: 10000, Celkový čas: 0,384Počet přečtených řádků: 10000, Celkový počet zpracovaných řádků: 10000, Celkový čas bloku: 0,456 sekundy

Více o rxDataStep

rxDataStep je výkonná funkce, která dokáže provádět více transformací na datovém rámci R. Můžete také použít rxDataStep k převodu dat do reprezentace požadované cílovým cílem: v tomto případě SQL Server.

Volitelně můžete na data specifikovat transformace pomocí R funkcí v argumentech pro rxDataStep. Příklady těchto operací jsou uvedeny později v tomto tutoriálu.

Další krok