Użyj RevoScaleR do instalacji pakietów R

Dotyczy: SQL Server 2016 (13.x) SQL Server 2017 (14.x)

Ten artykuł opisuje, jak korzystać z funkcji RevoScaleR (wersja 9.0.1 i nowsza) do instalacji pakietów R na SQL Server z użyciem usług Machine Learning lub R Services. Funkcje RevoScaleR mogą być używane przez zdalnych, nieadministratorów do instalacji pakietów na SQL Server bez bezpośredniego dostępu do serwera.

Funkcje RevoScaleR do zarządzania pakietami

Poniższa tabela opisuje funkcje używane do instalacji i zarządzania pakietami R.

Funkcja Description
rxSqlLibPaths Określ ścieżkę biblioteki instancji na zdalnym serwerze SQL Server.
rxFindPackage Otrzymuje ścieżkę dla jednego lub więcej pakietów na zdalnym SQL Server.
rxInstallPackages Wywołaj tę funkcję z zdalnego klienta R, aby zainstalować pakiety w kontekście obliczeniowym SQL Server, albo z określonego repozytorium, albo przez odczyt lokalnie zapisanych pakietów zipowanych. Funkcja ta sprawdza zależności i zapewnia, że powiązane pakiety mogą być instalowane na SQL Server, podobnie jak instalacja pakietów R w lokalnym kontekście obliczeniowym. Aby skorzystać z tej opcji, musisz mieć włączone zarządzanie pakietami na serwerze i bazie danych. Zarówno środowiska klienckie, jak i serwerowe muszą mieć tę samą wersję RevoScaleR.
rxInstalledPackages Otrzymuje listę pakietów zainstalowanych w określonym kontekście obliczeniowym.
rxSyncPackages Skopiuj informacje o bibliotece pakietów między systemem plików a bazą danych, dla określonego kontekstu obliczeniowego.
rxRemovePackages Usuwa pakiety z określonego kontekstu obliczeniowego. Oblicza także zależności i zapewnia, że pakiety, które nie są już używane przez inne pakiety na SQL Server, są usuwane, aby zwolnić zasoby.

Wymagania wstępne

  • Zdalne zarządzanie włączone w SQL Server. Więcej informacji można znaleźć w artykule Włącz zdalne zarządzanie pakietami R na SQL Server.

  • Wersje RevoScaleR są takie same zarówno w środowiskach klienckich, jak i serwerowych. Aby uzyskać więcej informacji, zobacz Pobieranie informacji o pakiecie języka R.

  • Masz uprawnienia do łączenia się z serwerem i bazą danych oraz do uruchamiania poleceń R. Musisz być członkiem roli bazy danych, która pozwala instalować pakiety na określonej instancji i bazie danych.

    • Pakiety w współdzielonym zakresie mogą być instalowane przez użytkowników należących do roli rpkgs-shared w określonej bazie danych. Wszyscy użytkownicy na tym stanowisku mogą odinstalować wspólne pakiety.

    • Pakiety w prywatnym zakresie mogą być instalowane przez dowolnego użytkownika należącego do roli rpkgs-private w bazie danych. Jednak użytkownicy mogą przeglądać i odinstalowywać tylko własne pakiety.

    • Właściciele baz danych mogą pracować z pakietami współdzielonymi lub prywatnymi.

Połączenia klienta

Ważna

Obsługa serwera Machine Learning Server (wcześniej znanego jako R Server) zakończyła się 1 lipca 2022 r. Aby uzyskać więcej informacji, zobacz Co się dzieje z serwerem Machine Learning Server?

Stacja robocza klienta może być Microsoft R Client lub Microsoft Machine Learning Server (data scientists często korzystają z darmowej wersji deweloperskiej) w tej samej sieci.

Wywołując funkcje zarządzania pakietami z odległego klienta R, najpierw musisz utworzyć obiekt kontekstu obliczeniowego, używając funkcji RxInSqlServer . Następnie, dla każdej funkcji zarządzania pakietami, której używasz, przekazuj kontekst obliczeniowy jako argument.

Tożsamość użytkownika jest zazwyczaj określana podczas ustawiania kontekstu obliczeniowego. Jeśli nie podasz nazwy użytkownika i hasła podczas tworzenia kontekstu obliczeniowego, używa się tożsamości użytkownika uruchamiającego kod R.

  1. W wierszu poleceń języka R zdefiniuj parametry połączenia z instancją i bazą danych.

  2. Użyj konstruktora RxInSqlServer do zdefiniowania kontekstu obliczeniowego SQL Server, używając parametry połączenia.

    sqlcc <- RxInSqlServer(connectionString = myConnString, shareDir = sqlShareDir, wait = sqlWait, consoleOutput = sqlConsoleOutput)
    
  3. Stwórz listę pakietów, które chcesz zainstalować i zapisz ją w zmiennej ciągu znaków.

    packageList <- c("e1071", "mice")
    
  4. Wywołaj rxInstallPackages i przekaż kontekst obliczeniowy oraz zmienną ciągową zawierającą nazwy pakietów.

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

    Jeśli wymagane są pakiety zależne, są one również instalowane, o ile komputer kliencki ma dostęp do internetu.

    Pakiety są instalowane przy użyciu danych uwierzytelniających użytkownika nawiązującego połączenie, w domyślnym zakresie tego użytkownika.

Funkcje zarządzania pakietami wywołań w procedurach przechowywanych

Możesz uruchamiać funkcje zarządzania pakietami wewnątrz sp_execute_external_script. Gdy to zrobisz, funkcja jest wykonywana przy użyciu kontekstu zabezpieczeń osoby wywołującej procedurę składowaną.

Examples

Ta sekcja przedstawia przykłady, jak korzystać z tych funkcji z klienta zdalnego podczas łączenia się z instancją SQL Server lub bazą danych jako kontekstu obliczeniowego.

Dla wszystkich przykładów musisz podać albo parametry połączenia, albo kontekst obliczeniowy, który wymaga parametry połączenia. Ten przykład przedstawia jeden ze sposobów stworzenia kontekstu obliczeniowego dla 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);

W zależności od lokalizacji serwera i modelu zabezpieczeń, możesz potrzebować podać specyfikację domeny i podsieci w parametry połączenia lub użyć logowania SQL. Przykład:

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

Pobierz ścieżkę pakietu w zdalnym kontekście obliczeniowym SQL Server

Ten przykład otrzymuje ścieżkę dla pakietu RevoScaleR w kontekście obliczeniowym, sqlcc.

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

Results

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

Wskazówka

Jeśli włączyłeś opcję wyświetlania wyjścia z konsoli SQL, możesz otrzymać komunikaty statusu od funkcji poprzedzającej zdanie print . Po zakończeniu testowania kodu ustaw consoleOutput na FALSE w konstruktorze kontekstu obliczeniowego, aby wyeliminować komunikaty.

Uzyskaj lokalizacje dla wielu paczek

Poniższy przykład pobiera ścieżki dla pakietów RevoScaleR i lattice w kontekście obliczeniowym sqlcc. Aby uzyskać informacje o wielu pakietach, należy przekazać wektor łańcuchowy zawierający nazwy pakietów.

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

Pobieraj wersje pakietów w zdalnym kontekście obliczeniowym

Uruchom to polecenie z konsoli R, aby uzyskać numer buildu i numery wersji pakietów zainstalowanych w kontekście obliczeniowym, sqlServer.

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

Zainstaluj pakiet na SQL Server

Ten przykład instaluje pakiet prognoz i jego zależności w kontekście obliczeniowym.

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

Usuń pakiet z SQL Server

Ten przykład usuwa pakiet prognoz i jego zależności z kontekstu obliczeniowego.

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

Synchronizacja pakietów między bazą danych a systemem plików

Poniższy przykład sprawdza bazę danych TestDB i określa, czy wszystkie pakiety są zainstalowane w systemie plików. Jeśli brakuje niektórych pakietów, są one instalowane w systemie plików.

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

Synchronizacja pakietów działa oddzielnie dla każdej bazy danych i każdego użytkownika. Więcej informacji można znaleźć w R package synchronization for SQL Server.

Użyj procedury składowanej, aby wyświetlić pakiety w SQL Server

Uruchom to polecenie w programie Management Studio lub innym narzędziu obsługującym T-SQL, aby uzyskać listę pakietów zainstalowanych w bieżącym wystąpieniu za pomocą procedury składowanej z użyciem rxInstalledPackages.

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

Funkcja ta rxSqlLibPaths może być użyta do określenia aktywnej biblioteki używanej przez SQL Server Machine Learning Services. Ten skrypt może zwracać tylko ścieżkę biblioteki dla bieżącego serwera.

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;