Dela via


Snabbstart: Köra enkla R-skript med SQL-maskininlärning

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL Managed Instance

I den här snabbstarten kör du en uppsättning enkla R-skript med HJÄLP av SQL Server Machine Learning Services eller stordatakluster. Du får lära dig hur du använder den lagrade proceduren sp_execute_external_script för att köra skriptet i en SQL Server-instans.

I den här snabbstarten kör du en uppsättning enkla R-skript med SQL Server Machine Learning Services. Du får lära dig hur du använder den lagrade proceduren sp_execute_external_script för att köra skriptet i en SQL Server-instans.

I den här snabbstarten kör du en uppsättning enkla R-skript med SQL Server R Services. Du får lära dig hur du använder den lagrade proceduren sp_execute_external_script för att köra skriptet i en SQL Server-instans.

I den här snabbstarten kör du enkla R-skript med hjälp av Azure SQL Managed Instance Machine Learning Services. Du får lära dig hur du använder den lagrade proceduren sp_execute_external_script för att köra skriptet i databasen.

Förutsättningar

Du behöver följande förutsättningar för att köra den här snabbstarten.

  • Ett verktyg för att köra SQL-frågor som innehåller R-skript. Den här snabbstarten använder Azure Data Studio.

Köra ett enkelt skript

Om du vill köra ett R-skript skickar du det som ett argument till den system lagrade proceduren , sp_execute_external_script. Den här system lagrade proceduren startar R-körningen, skickar data till R, hanterar R-användarsessioner på ett säkert sätt och returnerar eventuella resultat till klienten.

I följande steg kör du det här R-exempelskriptet:

a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))
  1. Öppna Azure Data Studio och anslut till servern.

  2. Skicka det fullständiga R-skriptet till den sp_execute_external_script lagrade proceduren.

    Skriptet skickas via @script argumentet. Allt i @script argumentet måste vara giltig R-kod.

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'
    a <- 1
    b <- 2
    c <- a/b
    d <- a*b
    print(c(c, d))
    '
    
  3. Rätt resultat beräknas och R-funktionen print returnerar resultatet till fönstret Meddelanden .

    Det borde se ut ungefär så här.

    Results

    STDOUT message(s) from external script:
    0.5 2
    

Köra ett Hello World-skript

Ett typiskt exempelskript är ett skript som bara matar ut strängen "Hello World". Kör följande kommando.

EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'OutputDataSet<-InputDataSet'
    , @input_data_1 = N'SELECT 1 AS hello'
WITH RESULT SETS(([Hello World] INT));
GO

Indata till den sp_execute_external_script lagrade proceduren omfattar:

Indata Description
@language definierar språktillägget för att anropa, i det här fallet R
@script definierar de kommandon som skickas till R-miljön. Hela R-skriptet måste omges av det här argumentet som Unicode-text. Du kan också lägga till texten i en variabel av typen nvarchar och sedan anropa variabeln
@input_data_1 Data som returneras av frågan skickas till R-runtime, som returnerar datan som en dataframe.
MED RESULTATUPPSÄTTNINGAR -satsen definierar schemat för den returnerade datatabellen och lägger till "Hello World" som kolumnnamn, int för datatypen

Kommandot matar ut följande text:

Hello World
1

Använda indata och utdata

Som standard sp_execute_external_script accepterar en enskild datauppsättning som indata, som du vanligtvis anger i form av en giltig SQL-fråga. Den returnerar sedan en enda R-dataram som utdata.

Nu ska vi använda standardvariablerna sp_execute_external_scriptför in- och utdata i : InputDataSet och OutputDataSet.

  1. Skapa en liten tabell med testdata.

    CREATE TABLE RTestData (col1 INT NOT NULL)
    
    INSERT INTO RTestData
    VALUES (1);
    
    INSERT INTO RTestData
    VALUES (10);
    
    INSERT INTO RTestData
    VALUES (100);
    GO
    
  2. Använd -instruktionen SELECT för att fråga tabellen.

    SELECT *
    FROM RTestData
    

    Results

    Innehållet i RTestData-tabellen

  3. Kör följande R-skript. Den hämtar data från tabellen med hjälp av -instruktionen SELECT , skickar dem genom R-körningen och returnerar data som en dataram. Satsen WITH RESULT SETS definierar schemat för den returnerade datatabellen för SQL och lägger till kolumnnamnet NewColName.

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'OutputDataSet <- InputDataSet;'
        , @input_data_1 = N'SELECT * FROM RTestData;'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Results

    Utdata från R-skript som returnerar data från en tabell

  4. Nu ska vi ändra namnen på indata- och utdatavariablerna. Standardnamnen för in- och utdatavariabler är InputDataSet och OutputDataSet. Det här skriptet ändrar namnen till SQL_in och SQL_out:

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N' SQL_out <- SQL_in;'
        , @input_data_1 = N' SELECT 12 as Col;'
        , @input_data_1_name = N'SQL_in'
        , @output_data_1_name = N'SQL_out'
    WITH RESULT SETS(([NewColName] INT NOT NULL));
    

    Observera att R är skiftlägeskänsligt. De indata- och utdatavariabler som används i R-skriptet (SQL_out, SQL_in) måste matcha namnen som definierats med @input_data_1_name och @output_data_1_name, inklusive skiftläge.

    Tips/Råd

    Endast en indatauppsättning kan skickas som en parameter och du kan bara returnera en datauppsättning. Du kan dock anropa andra datauppsättningar inifrån R-koden och du kan returnera utdata av andra typer utöver datauppsättningen. Du kan också lägga till nyckelordet OUTPUT i valfri parameter så att det returneras med resultatet.

  5. Du kan också generera värden bara med hjälp av R-skriptet utan indata (@input_data_1 är inställt på tom).

    Följande skript matar ut texten "hello" och "world".

    EXECUTE sp_execute_external_script @language = N'R'
        , @script = N'
    mytextvariable <- c("hello", " ", "world");
    OutputDataSet <- as.data.frame(mytextvariable);
    '
        , @input_data_1 = N''
    WITH RESULT SETS(([Col1] CHAR(20) NOT NULL));
    

    Results

    Sökfrågeresultat med som indata

Kontrollera R-versionen

Om du vill se vilken version av R som är installerad kör du följande skript.

EXECUTE sp_execute_external_script @language = N'R'
    , @script = N'print(version)';
GO

R-funktionen print returnerar versionen till fönstret Meddelanden . I exemplet nedan ser du att R version 3.4.4 är installerad i det här fallet.

Results

STDOUT message(s) from external script:
                   _
platform       x86_64-w64-mingw32
arch           x86_64
os             mingw32
system         x86_64, mingw32
status
major          3
minor          4.4
year           2018
month          03
day            15
svn rev        74408
language       R
version.string R version 3.4.4 (2018-03-15)
nickname       Someone to Lean On

Listan över R-paket

Microsoft tillhandahåller ett antal R-paket som är förinstallerade med Machine Learning Services.

Microsoft tillhandahåller ett antal R-paket som är förinstallerade med R Services.

Om du vill se en lista över vilka R-paket som är installerade, inklusive information om version, beroenden, licens och bibliotekssökväg, kör du följande skript.

EXEC sp_execute_external_script @language = N'R'
    , @script = N'
OutputDataSet <- data.frame(installed.packages()[,c("Package", "Version", "Depends", "License", "LibPath")]);'
WITH result sets((
            Package NVARCHAR(255)
            , Version NVARCHAR(100)
            , Depends NVARCHAR(4000)
            , License NVARCHAR(1000)
            , LibPath NVARCHAR(2000)
            ));

Utdata kommer från installed.packages() i R och returneras som en resultatuppsättning.

Results

Installerade paket i R

Nästa steg

Följ den här snabbstarten om du vill lära dig hur du använder datastrukturer när du använder R med SQL-maskininlärning: