Установка пакетов R с помощью RevoScaleR

Область применения: SQL Server 2016 (13.x) SQL Server 2017 (14.x)

В этой статье описывается, как использовать функции RevoScaleR (версии 9.0.1 и выше) для установки пакетов R в SQL Server со Службами машинного обучения или R Services. Удаленные пользователи без прав администратора могут использовать функции RevoScaleR, чтобы установить пакеты в SQL Server без прямого доступа к серверу.

Функции RevoScaleR для управления пакетами

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

Функция Описание
rxSqlLibPaths Определяет путь к библиотеке экземпляров на удаленном SQL Server.
rxFindPackage; Получает путь для одного или нескольких пакетов на удаленном SQL Server.
rxInstallPackages Вызывайте эту функцию из удаленного клиента R для установки пакетов в контексте вычислений SQL Server из указанного репозитория или посредством считывания сжатых пакетов, сохраненных локально. Эта функция проверяет зависимости, чтобы убедиться, что в SQL Server можно установить все связанные пакеты, как и при установке пакета R в локальном контексте. Чтобы использовать этот параметр, необходимо включить управление пакетами на сервере и в базе данных. Клиентская и серверная среды должны иметь одинаковую версию RevoScaleR.
rxInstalledPackages. Получает список пакетов, установленных в указанном контексте вычислений.
rxSyncPackages Копирует сведения о библиотеке пакетов между файловой системой и базой данных для указанного контекста вычислений.
rxRemovePackages Удаляет пакеты из указанного контекста вычислений. Функция также вычисляет зависимости и гарантирует удаление пакетов, которые больше не используются другими пакетами в SQL Server, для освобождения ресурсов.

Предварительные требования

  • Удаленное управление на SQL Server включено. Дополнительные сведения см. в статье Enable or disable remote package management for SQL Server (Включение и выключение удаленного управления пакетами на SQL Server).

  • Клиентская и серверная среды должны иметь одинаковую версию RevoScaleR. Дополнительные сведения см. в статье Получение сведений о пакете R.

  • У вас есть разрешение на подключение к серверу и базе данных, а также на выполнение команд R. Необходимо быть членом роли базы данных, которая позволяет устанавливать пакеты на заданном экземпляре и базе данных.

    • Пакеты в общей области могут быть установлены пользователями с ролью rpkgs-shared в указанной базе данных. Все пользователи этой роли могут удалять общие пакеты.

    • Пакеты в закрытой области могут быть установлены любым пользователем с ролью rpkgs-private в базе данных. Тем не менее пользователи могут просматривать и удалять только свои собственные пакеты.

    • Владельцы базы данных могут работать с общими или закрытыми пакетами.

Клиентские подключения

Важно!

Поддержка Machine Learning Server (ранее известная как R Server) закончилась 1 июля 2022 г. Дополнительные сведения см. в разделе Что будет с Machine Learning Server?

Поддерживается клиентская рабочая станция Microsoft R Client или Microsoft Machine Learning Server (специалисты по обработке и анализу данных часто используют бесплатный выпуск Developer) в той же сети.

При вызове функций управления пакетами из удаленного клиента R необходимо сначала создать объект контекста вычислений, используя функцию RxInSqlServer. Затем для каждой используемой функции управления пакетами передайте контекст вычислений в качестве аргумента.

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

  1. В командной строке R определите строку подключения к экземпляру и базе данных.

  2. Используйте конструктор RxInSqlServer, чтобы определить контекст вычислений SQL Server с помощью строки подключения.

    sqlcc <- RxInSqlServer(connectionString = myConnString, shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput)
    
  3. Создайте список пакетов, которые необходимо установить, и сохраните его в строковой переменной.

    packageList <- c("e1071", "mice")
    
  4. Вызовите rxInstallPackages и передайте контекст вычислений и строковую переменную, содержащую имена пакетов.

    rxInstallPackages(pkgs = packageList, verbose = TRUE, computeContext = sqlcc)
    

    Если требуются зависимые пакеты, они также устанавливаются при условии, что на клиенте доступно подключение к Интернету.

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

Вызов функций управления пакетами в хранимых процедурах

Функции управления пакетами можно выполнять в sp_execute_external_script. При выборе этого варианта функция выполняется в контексте безопасности вызывающего хранимую процедуру.

Примеры

В этом разделе приводятся примеры использования этих функций из удаленного клиента при подключении к экземпляру SQL Server или базе данных в качестве контекста вычислений.

Для всех примеров необходимо указать строку подключения или контекст вычислений, для которого требуется строка подключения. В этом примере представлен один из способов создания контекста вычислений для SQL Server:

instance_name <- "computer-name/instance-name";
database_name <- "TestDB";
sqlWait= TRUE;
sqlConsoleOutput <- TRUE;
connString <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name, ";Trusted_Connection=true;", sep="");
sqlcc <- RxInSqlServer(connectionString = connString, wait = sqlWait, consoleOutput = sqlConsoleOutput, numTasks = 4);

В зависимости от расположения сервера и модели безопасности может потребоваться указать в строке подключения спецификацию домена и подсети или использовать имя входа SQL. Пример:

connStr <- "Driver=SQL Server;Server=myserver.financeweb.contoso.com;Database=Finance;Uid=RUser1;Pwd=RUserPassword"

Получение пути пакета в удаленном контексте вычислений SQL Server

Этот пример возвращает путь для пакета RevoScaleR в контексте вычислений sqlcc.

sqlPackagePaths <- rxFindPackage(package = "RevoScaleR", computeContext = sqlcc)
print(sqlPackagePaths)

Результаты

C:/Program Files/Microsoft SQL Server/MSSQL14.MSSQLSERVER/R_SERVICES/library/RevoScaleR.

Совет

Если вы включили параметр для просмотра выходных данных консоли SQL, вы можете получить сообщения о состоянии от функции, предшествующей оператору print. После завершения тестирования кода задайте для параметра consoleOutput значение FALSE в конструкторе контекста вычислений, чтобы очистить сообщения.

Получение расположений для нескольких пакетов

Этот пример возвращает пути для пакетов RevoScaleR и lattice в контексте вычислений sqlcc. Для получения сведений о нескольких пакетах передайте строковый вектор, содержащий имена пакетов.

packagePaths <- rxFindPackage(package = c("RevoScaleR", "lattice"), computeContext = sqlcc)
print(packagePaths)

Получение версий пакетов в удаленном контексте вычислений

Запустите эту команду в консоли R, чтобы получить номер сборки и номера версий для пакетов, установленных в контексте вычислений sqlServer.

sqlPackages <- rxInstalledPackages(fields = c("Package", "Version", "Built"), computeContext = sqlServer)

Установка пакета в SQL Server

В этом примере устанавливается пакет forecast и его зависимости в контексте вычислений.

pkgs <- c("forecast")
rxInstallPackages(pkgs = pkgs, verbose = TRUE, scope = "private", computeContext = sqlcc)

Удаление пакета из SQL Server

В этом примере удаляется пакет forecast и его зависимости из контекста вычислений.

pkgs <- c("forecast")
rxRemovePackages(pkgs = pkgs, verbose = TRUE, scope = "private", computeContext = sqlcc)

Синхронизация пакетов между базой данных и файловой системой

В следующем примере проверяется база данных TestDB и определяется, все ли пакеты установлены в файловой системе. Если некоторые пакеты отсутствуют, они устанавливаются в файловой системе.

# Instantiate the compute context
connectionString <- "Driver=SQL Server;Server=myServer;Database=TestDB;Trusted_Connection=True;"
computeContext <- RxInSqlServer(connectionString = connectionString )

# Synchronize the packages in the file system for all scopes and users
rxSyncPackages(computeContext=computeContext, verbose=TRUE)

Синхронизация пакетов выполняется для каждой базы данных и для каждого пользователя. Дополнительные сведения о синхронизации пакетов R для SQL Server см. в этой статье.

Использование хранимой процедуры для перечисления пакетов в SQL Server

Используя rxInstalledPackages в хранимой процедуре, выполните эту команду из Management Studio или другого средства, поддерживающего T-SQL, чтобы получить список установленных пакетов на текущем экземпляре.

EXEC sp_execute_external_script 
  @language=N'R', 
  @script=N'
    myPackages <- rxInstalledPackages();
    OutputDataSet <- as.data.frame(myPackages);
    '

Функцию rxSqlLibPaths можно использовать для определения активной библиотеки, которая работает со Службами машинного обучения SQL Server. Этот скрипт может возвращать путь к библиотеке только для текущего сервера.

declare @instance_name nvarchar(100) = @@SERVERNAME, @database_name nvarchar(128) = db_name();
exec sp_execute_external_script 
  @language = N'R',
  @script = N'
    connStr <- paste("Driver=SQL Server;Server=", instance_name, ";Database=", database_name, ";Trusted_Connection=true;", sep="");
    .libPaths(rxSqlLibPaths(connStr));
    print(.libPaths());
  ', 
  @input_data_1 = N'', 
  @params = N'@instance_name nvarchar(100), @database_name nvarchar(128)',
  @instance_name = @instance_name, 
  @database_name = @database_name;

См. также раздел