Use o RevoScaleR para instalar pacotes R

Aplica-se a: SQL Server 2016 (13.x) SQL Server 2017 (14.x)

Este artigo descreve como usar funções do RevoScaleR (versão 9.0.1 e posteriores) para instalar pacotes R no SQL Server com Machine Learning Services ou R Services. As funções RevoScaleR podem ser usadas por remotos, não administradores, para instalar pacotes no SQL Server sem acesso direto ao servidor.

Funções do RevoScaleR para gestão de pacotes

A tabela seguinte descreve as funções usadas para a instalação e gestão de pacotes R.

Função Description
rxSqlLibPaths Determine o caminho da biblioteca de instâncias no SQL Server remoto.
rxFindPackage Obtém o caminho para um ou mais pacotes no SQL Server remoto.
rxInstallPackages Chame esta função a partir de um cliente R remoto para instalar pacotes num contexto de computação do SQL Server, seja a partir de um repositório especificado, seja lendo pacotes comprimidos gravados localmente. Esta função verifica dependências e assegura que quaisquer pacotes relacionados podem ser instalados no SQL Server, tal como a instalação de pacotes R no contexto de computação local. Para usar esta opção, deve ter ativado a gestão de pacotes no servidor e na base de dados. Tanto os ambientes cliente como o servidor devem ter a mesma versão do RevoScaleR.
rxInstalledPackages Obtém uma lista de pacotes instalados no contexto de computação especificado.
rxSyncPackages Copiar informação sobre uma biblioteca de pacotes entre o sistema de ficheiros e a base de dados, para o contexto de computação especificado.
rxRemovePackages Remove pacotes de um contexto de computação especificado. Também calcula dependências e garante que os pacotes que já não são usados por outros pacotes no SQL Server são removidos, para libertar recursos.

Pré-requisitos

  • Gestão remota ativada no SQL Server. Para mais informações, consulte Ativar gestão remota de pacotes R no SQL Server.

  • As versões do RevoScaleR são as mesmas tanto em ambientes de cliente como de servidor. Para obter mais informações, consulte Obter informações sobre o pacote R.

  • Tens permissão para te ligares ao servidor e a uma base de dados, e para executar comandos R. Deve ser membro de uma função de base de dados que lhe permita instalar pacotes na instância e base de dados especificadas.

    • Pacotes em âmbito partilhado podem ser instalados por utilizadores pertencentes à rpkgs-shared função numa base de dados especificada. Todos os utilizadores nesta função podem desinstalar pacotes partilhados.

    • Pacotes em escopo privado podem ser instalados por qualquer utilizador pertencente à rpkgs-private função numa base de dados. No entanto, os utilizadores só podem ver e desinstalar os seus próprios pacotes.

    • Os proprietários de bases de dados podem trabalhar com pacotes partilhados ou privados.

Conexões de cliente

Importante

O suporte ao Machine Learning Server (anteriormente conhecido como R Server) terminou a 1 de julho de 2022. Para obter mais informações, consulte O que está acontecendo com o Servidor de Aprendizado de Máquina?

Uma estação de trabalho cliente pode ser Microsoft R Client ou um Microsoft Machine Learning Server (os cientistas de dados usam frequentemente a edição gratuita para desenvolvedores) na mesma rede.

Ao chamar funções de gestão de pacotes a partir de um cliente R remoto, deve primeiro criar um objeto de contexto de computação, usando a função RxInSqlServer . A partir daí, para cada função de gestão de pacotes que usares, passa o contexto de computação como argumento.

A identidade do utilizador é tipicamente especificada ao definir o contexto de computação. Se não especificar um nome de utilizador e palavra-passe ao criar o contexto de computação, é usada a identidade do utilizador que executa o código R.

  1. A partir de uma linha de comandos R, defina uma cadeia de ligação para a instância e a base de dados.

  2. Use o construtor RxInSqlServer para definir um contexto de computação do SQL Server, usando a cadeia de ligação.

    sqlcc <- RxInSqlServer(connectionString = myConnString, shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput)
    
  3. Cria uma lista dos pacotes que queres instalar e guarda a lista numa variável de string.

    packageList <- c("e1071", "mice")
    
  4. Chama rxInstallPackages e passa o contexto de computação e a variável string que contém os nomes dos pacotes.

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

    Se forem necessários pacotes dependentes, estes também são instalados, assumindo que existe uma ligação à internet disponível no cliente.

    Os pacotes são instalados usando as credenciais do utilizador que faz a ligação, no âmbito padrão para esse utilizador.

Funções de gestão de pacotes de chamadas em procedimentos armazenados

Pode executar funções de gestão de pacotes dentro de sp_execute_external_script. Quando o fazes, a função é executada usando o contexto de segurança do chamador do procedimento armazenado.

Examples

Esta secção fornece exemplos de como usar estas funções a partir de um cliente remoto ao ligar-se a uma instância ou base de dados do SQL Server como contexto de computação.

Em todos os exemplos, tem de fornecer uma cadeia de ligação ou um contexto de computação, que requer uma cadeia de ligação. Este exemplo fornece uma forma de criar um contexto de computação para o 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);

Dependendo de onde o servidor está localizado e do modelo de segurança, pode ser necessário fornecer uma especificação de domínio e sub-rede na cadeia de ligação, ou usar um login SQL. Por exemplo:

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

Obter o caminho do pacote num contexto de computação remoto do SQL Server

Este exemplo obtém o caminho para o pacote RevoScaleR no contexto de computação, sqlcc.

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

Results

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

Sugestão

Se tiver ativado a opção de ver a saída da consola SQL, pode receber mensagens de estado da função que precede a print instrução. Depois de terminares de testar o teu código, define consoleOutput FALSE no construtor de contexto de computação para eliminar mensagens.

Obtenha localizações para múltiplos pacotes

O exemplo seguinte obtém os caminhos para os pacotes RevoScaleR e lattice , no contexto de computação, sqlcc. Para obter informação sobre múltiplos pacotes, passe um vetor string contendo os nomes dos pacotes.

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

Obtenha versões de pacotes num contexto de computação remota

Execute este comando a partir de uma consola R para obter o número de compilação e os números de versão dos pacotes instalados no contexto de computação, sqlServer.

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

Instale um pacote no SQL Server

Este exemplo instala o pacote de previsão e as suas dependências no contexto de computação.

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

Remover um pacote do SQL Server

Este exemplo remove o pacote de previsão e as suas dependências do contexto de computação.

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

Sincronizar pacotes entre base de dados e sistema de ficheiros

O exemplo seguinte verifica o TestDB da base de dados e determina se todos os pacotes estão instalados no sistema de ficheiros. Se alguns pacotes estiverem em falta, são instalados no sistema de ficheiros.

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

A sincronização de pacotes funciona por base de dados e por utilizador. Para mais informações, veja R package synchronization for SQL Server.

Use um procedimento armazenado para listar pacotes no SQL Server

Execute este comando a partir do Management Studio ou de outra ferramenta que suporte T-SQL, para obter uma lista dos pacotes instalados na instância atual, usando rxInstalledPackages num procedimento armazenado.

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

A rxSqlLibPaths função pode ser usada para determinar a biblioteca ativa utilizada pelos SQL Server Machine Learning Services. Este script só pode devolver o caminho da biblioteca para o servidor atual.

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;