Установка пакетов 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 и управления ими.
Function | Description |
---|---|
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
в базе данных. Тем не менее пользователи могут просматривать и удалять только свои собственные пакеты.Владельцы базы данных могут работать с общими или закрытыми пакетами.
Клиентские подключения
Внимание
Поддержка сервера Машинное обучение (ранее известного как R Server) закончилась 1 июля 2022 года. Дополнительные сведения см. в разделе Что будет с Machine Learning Server?
Поддерживается клиентская рабочая станция Microsoft R Client или Microsoft Machine Learning Server (специалисты по обработке и анализу данных часто используют бесплатный выпуск Developer) в той же сети.
При вызове функций управления пакетами из удаленного клиента R необходимо сначала создать объект контекста вычислений, используя функцию RxInSqlServer. Затем для каждой используемой функции управления пакетами передайте контекст вычислений в качестве аргумента.
При установке контекста вычислений обычно указывается удостоверение пользователя. Если при создании контекста вычислений не указать имя пользователя и пароль, будет использоваться удостоверение пользователя, запускающего код R.
В командной строке R определите строку подключения к экземпляру и базе данных.
Используйте конструктор RxInSqlServer, чтобы определить контекст вычислений SQL Server с помощью строки подключения.
sqlcc <- RxInSqlServer(connectionString = myConnString, shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput)
Создайте список пакетов, которые необходимо установить, и сохраните его в строковой переменной.
packageList <- c("e1071", "mice")
Вызовите 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;