Краткое руководство. Выполнение простых скриптов 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 Server. Сведения об установке служб машинного обучения см. в руководстве по установке для Windows или руководстве по установке для Linux. Можно также включить Службы машинного обучения в кластерах больших данных SQL Server.
- Службы машинного обучения SQL Server. Сведения об установке служб машинного обучения см. в руководстве по установке для Windows.
- SQL Server 2016 R Services. Сведения об установке служб R Services см. в руководстве по установке для Windows.
- Службы машинного обучения в Управляемом экземпляре SQL Azure. Дополнительные сведения см. в статье Общие сведения о службах машинного обучения в управляемом экземпляре SQL Azure.
- Инструмент для выполнения 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))
Откройте Azure Data Studio и подключитесь к своему серверу.
Передайте весь сценарий 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)) '
Далее вычисляется правильный результат, и функция 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.
Создайте небольшую таблицу тестовых данных.
CREATE TABLE RTestData (col1 INT NOT NULL) INSERT INTO RTestData VALUES (1); INSERT INTO RTestData VALUES (10); INSERT INTO RTestData VALUES (100); GO
Используйте инструкцию
SELECT
для запроса в эту таблицу.SELECT * FROM RTestData
Результаты
Выполните следующий сценарий 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));
Результаты
Теперь изменим имена входных и выходных переменных. Имена входных и выходных переменных по умолчанию°— 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 к любому параметру, чтобы он возвращался с результатами.
Также можно формировать значения только с помощью сценария 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));
Результаты
@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 в машинном обучении SQL, см. в этом кратком руководстве: