Краткое руководство. Выполнение простых скриптов R с использованием машинного обучения SQL

Область применения: SQL Server 2016 (13.x) и более поздних версий Управляемый экземпляр SQL Azure

В этом кратком руководстве вы запустите ряд простых сценариев R с помощью Служб машинного обучения SQL Server или в Кластерах больших данных. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.

В этом кратком руководстве вы запустите несколько простых скриптов R, используя Службы машинного обучения SQL Server. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.

В этом кратком руководстве вы запустите ряд простых сценариев R, используя службы SQL Server R Services. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в экземпляре SQL Server.

В этом кратком руководстве вы запустите ряд простых скриптов R, используя Службы машинного обучения в управляемом экземпляре SQL Azure. Также вы узнаете, как применить хранимую процедуру sp_execute_external_script для выполнения скрипта в базе данных.

Необходимые компоненты

Для работы с этим кратким руководством необходимо следующее.

  • Инструмент для выполнения SQL-запросов, содержащих сценарии R. В этом кратком руководстве используется Azure Data Studio.

Выполнение простого сценария

Чтобы выполнить сценарий R, необходимо передать его в качестве аргумента в системную хранимую процедуру sp_execute_external_script. Эта системная хранимая процедура запускает среду выполнения R, передает данные в R, безопасно управляет пользовательскими сеансами R и возвращает результаты клиенту.

В следующих шагах вы запустите этот пример сценария R.

a <- 1
b <- 2
c <- a/b
d <- a*b
print(c(c, d))
  1. Откройте Azure Data Studio и подключитесь к своему серверу.

  2. Передайте весь сценарий R в хранимую процедуру sp_execute_external_script.

    Сценарий передается с помощью аргумента @script. Все, что находится внутри аргумента @script, должно быть допустимым кодом R.

    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 print возвращает результат в окне Сообщения.

    Файл должен выглядеть следующим образом:

    Результаты

    STDOUT message(s) from external script:
    0.5 2
    

Выполнение сценария Hello World

Типичный пример — сценарий, который просто выводит строку "Hello World". Выполните следующую команду.

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

В хранимую процедуру sp_execute_external_script передаются следующие входные данные.

Входные данные Description
@language Определяет вызываемое расширение языка (в данном случае R).
@script Определяет команды, которые передаются в среду выполнения R. Весь сценарий R должен содержаться в этом аргументе в виде текста в Юникоде. Также можно добавить текст в переменную типа nvarchar, а затем вызвать ее.
@input_data_1 Данные, возвращаемые запросом, передаются в среду выполнения R, которая возвращает их в виде кадра данных.
WITH RESULT SETS Это предложение определяет схему возвращаемой таблицы данных. В данном случае добавляется "Hello World" в качестве имени столбца и int в качестве типа данных.

Эта команда выводит следующий текст:

Hello World
1

Использование входных и выходных данных

По умолчанию процедура sp_execute_external_script принимает в качестве входных данных один набор данных, обычно предоставляемый в виде допустимого SQL-запроса. Затем она возвращает один кадр данных R в качестве выходных данных.

Теперь давайте будем использовать входные и выходные переменные sp_execute_external_scriptпо умолчанию: InputDataSet и OutputDataSet.

  1. Создайте небольшую таблицу тестовых данных.

    CREATE TABLE RTestData (col1 INT NOT NULL)
    
    INSERT INTO RTestData
    VALUES (1);
    
    INSERT INTO RTestData
    VALUES (10);
    
    INSERT INTO RTestData
    VALUES (100);
    GO
    
  2. Используйте инструкцию SELECT для запроса в эту таблицу.

    SELECT *
    FROM RTestData
    

    Результаты

    Содержимое таблицы RTestData

  3. Выполните следующий сценарий R. Он получает данные из таблицы с помощью инструкции SELECT, передает их через среду выполнения R и возвращает результаты в виде кадра данных. Предложение WITH RESULT SETS определяет схему таблицы возвращаемых данных для SQL Server, добавляя имя столбца 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));
    

    Результаты

    Выходные данные сценария R, возвращающего данные из таблицы

  4. Теперь изменим имена входных и выходных переменных. Имена входных и выходных переменных по умолчанию°— InputDataSet и OutputDataSet. Сценарий изменяет их на SQL_in и 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));
    

    Обратите внимание, что в R учитывается регистр. Входные и выходные переменные, используемые в сценарии R (SQL_out, SQL_in), должны соответствовать именам, определенным в аргументах @input_data_1_name и @output_data_1_name, включая регистр.

    Совет

    В качестве параметра может быть передан только один входной набор данных, и можно возвращать только один набор данных. Однако вы можете вызывать другие наборы данных из кода R, а также возвращать выходные данные других типов в дополнение к набору данных. Вы также можете добавить ключевое слово OUTPUT к любому параметру, чтобы он возвращался с результатами.

  5. Также можно формировать значения только с помощью сценария R, без каких-либо входных данных (в аргументе @input_data_1 задано пустое значение).

    Следующий сценарий выводит текст "hello" и "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));
    

    Результаты

    Результаты запроса с помощью класса <span=@script как входные данные" />

Проверка версии R

Если вы хотите узнать, какая версия R установлена, выполните приведенный ниже скрипт.

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

Функция R print возвращает версию в окне Сообщения. В приведенном ниже примере можно видеть, что в данном случае установлен R версии 3.4.4.

Результаты

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

Получение списка пакетов R

Корпорация Майкрософт предоставляет ряд пакетов R, которые устанавливаются вместе со Службами машинного обучения.

Корпорация Майкрософт предоставляет ряд пакетов R, которые устанавливаются вместе со службами R Services.

Чтобы просмотреть список установленных пакетов R, включая сведения о версии, зависимостях, лицензии и пути к библиотеке, выполните следующий сценарий.

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)
            ));

Выходные данные installed.packages() в R и возвращаются в виде результирующего набора.

Результаты

Установленные пакеты в R

Следующие шаги

Сведения о том, как применять структуры данных при использовании R в машинном обучении SQL, см. в этом кратком руководстве: