RevoScaleR을 사용하여 R 패키지 설치
적용 대상: SQL Server 2016(13.x) SQL Server 2017(14.x)
이 문서에서는 RevoScaleR(버전 9.0.1 이상) 함수를 사용하여 Machine Learning Services 또는 R Services를 통해 SQL Server에 R 패키지를 설치하는 방법에 대해 설명합니다. RevoScaleR 함수는 서버에 직접 액세스하지 않고도 관리자가 아닌 원격 위치에서 SQL Server에 패키지를 설치하는 데 사용할 수 있습니다.
R 패키지 관리를 위한 RevoScaleR 함수
다음 표에서는 R 패키지 설치 및 관리에 사용되는 함수에 대해 설명합니다.
기능 | Description |
---|---|
rxSqlLibPaths | 원격 SQL Server의 인스턴스 라이브러리 경로를 확인합니다. |
rxFindPackage | 원격 SQL Server에 있는 하나 이상의 패키지에 대한 경로를 가져옵니다. |
rxInstallPackages | 원격 R 클라이언트에서 이 함수를 호출하여 지정된 리포지토리에서 또는 로컬로 저장된 압축 패키지를 읽어 SQL Server 컴퓨팅 컨텍스트에 패키지를 설치합니다. 이 함수는 종속성을 확인하고 로컬 컴퓨팅 컨텍스트의 R 패키지 설치와 마찬가지로 SQL Server에 관련 패키지를 설치할 수 있는지 확인합니다. 이 옵션을 사용하려면 서버 및 데이터베이스에서 패키지 관리를 사용하도록 설정해야 합니다. 클라이언트 환경과 서버 환경의 RevoScaleR 버전이 동일해야 합니다. |
rxInstalledPackages | 지정된 컴퓨팅 컨텍스트에서 설치된 패키지 목록을 가져옵니다. |
rxSyncPackages | 지정된 컴퓨팅 컨텍스트에 대한 패키지 라이브러리 정보를 파일 시스템과 데이터베이스 사이에 복사합니다. |
rxRemovePackages | 지정된 컴퓨팅 컨텍스트에서 패키지를 제거합니다. 또한 종속성을 계산하고 SQL Server의 다른 패키지에서 더 이상 사용되지 않는 패키지를 제거하여 리소스를 확보하도록 합니다. |
필수 조건
SQL Server에서 원격 관리를 사용하도록 설정했습니다. 자세한 내용은 SQL Server에서 R 패키지 관리 사용을 참조하세요.
RevoScaleR 버전이 클라이언트 및 서버 환경에서 동일합니다. 자세한 내용은 R 패키지 정보 가져오기를 참조하세요.
서버와 데이터베이스에 연결하고 R 명령을 실행할 수 있는 권한이 있습니다. 지정된 인스턴스 및 데이터베이스에 패키지를 설치할 수 있도록 하는 데이터베이스 역할의 멤버여야 합니다.
지정된 데이터베이스에서
rpkgs-shared
역할에 속하는 사용자가 공유 범위의 패키지를 설치할 수 있습니다. 이 역할의 모든 사용자는 공유 패키지를 제거할 수 있습니다.데이터베이스에서
rpkgs-private
역할에 속하는 사용자가 프라이빗 범위의 패키지를 설치할 수 있습니다. 그러나 사용자는 자신의 패키지만 확인하고 제거할 수 있습니다.데이터베이스 소유자는 공유 또는 프라이빗 패키지를 사용할 수 있습니다.
클라이언트 연결
중요
Machine Learning Server(이전의 R Server) 지원은 2022년 7월 1일에 종료되었습니다. 자세한 내용은 Machine Learning Server는 어떻게 되나요?를 참조하세요.
클라이언트 워크스테이션은 동일한 네트워크에서 Microsoft R Client 또는 Microsoft Machine Learning Server(데이터 과학자는 일반적으로 무료 개발자 버전 사용)일 수 있습니다.
원격 R 클라이언트에서 패키지 관리 함수를 호출하는 경우 RxInSqlServer 함수를 사용하여 컴퓨팅 컨텍스트 개체를 먼저 만들어야 합니다. 그런 다음 사용하는 각 패키지 관리 함수에 대해 컴퓨팅 컨텍스트를 인수로 전달합니다.
사용자 ID는 일반적으로 컴퓨팅 컨텍스트를 설정할 때 지정됩니다. 컴퓨팅 컨텍스트를 만들 때 사용자 이름 및 암호를 지정하지 않으면 R 코드를 실행하는 사용자의 ID가 사용됩니다.
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 컴퓨팅 컨텍스트에 대한 패키지 경로 가져오기
이 예에서는 컴퓨팅 컨텍스트 sqlcc
에서 RevoScaleR 패키지의 경로를 가져옵니다.
sqlPackagePaths <- rxFindPackage(package = "RevoScaleR", computeContext = sqlcc)
print(sqlPackagePaths)
결과
"C:/Program Files/Microsoft SQL Server/MSSQL14.MSSQLSERVER/R_SERVICES/library/RevoScaleR"
팁
SQL 콘솔 출력을 표시하는 옵션을 사용하도록 설정한 경우 print
문 앞에 오는 함수에서 상태 메시지를 가져올 수 있습니다. 코드 테스트를 마친 후에는 컴퓨팅 컨텍스트 생성자에서 consoleOutput
을 FALSE로 설정하여 메시지를 제거합니다.
여러 패키지의 위치 가져오기
다음 예제에서는 컴퓨팅 컨텍스트 sqlcc
에서 RevoScaleR 및 lattice패키지의 경로를 가져옵니다. 여러 패키지에 대한 정보를 가져오려면 패키지 이름을 포함하는 문자열 벡터를 전달합니다.
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)
패키지 동기화는 데이터베이스당 및 사용자별로 작동합니다. 자세한 내용은 SQL Server의 R 패키지 동기화를 참조하세요.
저장 프로시저를 사용하여 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 Machine Learning Services에서 사용하는 활성 라이브러리를 확인할 수 있습니다. 이 스크립트는 현재 서버에 대한 라이브러리 경로만 반환할 수 있습니다.
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;