Синхронизация пакетов R для SQL Server

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

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

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

В этой статье описывается функция синхронизации пакетов, а также как использовать функцию rxSyncPackages для выполнения следующих задач:

  • Синхронизация списка пакетов для всей базы данных SQL Server.

  • Синхронизация пакетов, используемых отдельным пользователем или группой пользователей.

  • Если пользователь переходит на другой SQL Server, можно восстановить резервную копию рабочей базы данных пользователя на новом сервере, а пакеты для пользователя будут установлены в файловую систему на новом сервере в соответствии с требованиями R.

Например, синхронизацию пакетов можно использовать в следующих сценариях:

  • Администратор баз данных восстановил экземпляр SQL Server на новом компьютере и просит пользователей подключиться из своих клиентов R и запустить rxSyncPackages для обновления и восстановления пакетов.

  • Вы считаете, что пакет R в файловой системе поврежден, поэтому вы запускаете rxSyncPackages в SQL Server.

Требования

Прежде чем можно будет использовать синхронизацию пакетов, необходимо установить соответствующую версию Microsoft R. Эта функция предоставляется в Microsoft R версии 9.1.0 или более поздней.

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

Определение того, поддерживает ли сервер управление пакетами

Эта функция доступна в SQL Server 2017 CTP 2 или более поздней версии.

Включение функции управления пакетами

Чтобы использовать синхронизацию пакетов, необходимо включить новую функцию управления пакетами в экземпляре SQL Server и в отдельных базах данных. Дополнительные сведения см. в статье Enable or disable remote package management for SQL Server (Включение или отключение удаленного управления пакетами для SQL Server).

  1. Администратор сервера включает функцию для экземпляра SQL Server.
  2. Для каждой базы данных администратор предоставляет отдельным пользователям возможность установки или совместного использования пакетов R с помощью ролей базы данных.

После этого можно использовать функции RevoScaleR, такие как rxInstallPackages, для установки пакетов в базу данных. Сведения о пользователях и пакетах, которые они могут использовать, хранятся в экземпляре SQL Server.

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

Разрешения

  • Пользователь, выполняющий функцию синхронизации пакетов, должен быть субъектом безопасности в экземпляре SQL Server и в базе данных, в которой находятся пакеты.

  • Вызывающий объект функции должен быть членом одной из следующих ролей управления пакетами: rpkgs-shared или rpkgs-private.

  • Чтобы синхронизировать пакеты, помеченные как shared, пользователь, выполняющий функцию, должен быть членом роли rpkgs-shared, а перемещаемые пакеты должны быть установлены в общую библиотеку областей.

  • Чтобы синхронизировать пакеты, помеченные как private, владелец пакета или администратор должен запустить функцию, а пакеты должны быть частными.

  • Чтобы синхронизировать пакеты от имени других пользователей, владелец должен быть членом роли базы данных db_owner.

Как работает синхронизация пакетов

Чтобы использовать синхронизацию пакетов, вызовите rxSyncPackages (новая функция в RevoScaleR).

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

  1. Создайте контекст вычислений SQL Server с помощью функции RxInSqlServer. Если контекст вычислений не указан, используется текущий.

  2. Укажите имя базы данных в экземпляре в указанном контексте вычислений. Пакеты синхронизируются для каждой базы данных.

  3. Укажите пакеты для синхронизации с использованием аргумента областей.

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

    При запуске функции без указания области private или shared все пакеты синхронизируются.

  4. Если команда выполнена успешно, существующие пакеты в файловой системе добавляются в базу данных с указанной областью и владельцем.

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

    Если функция управления пакетами недоступна в целевой базе данных, возникает ошибка: The package management feature is either not enabled on the SQL Server or version is too old (Функция управления пакетами не включена на SQL Server или используется слишком старая версия)

Пример 1. Синхронизация всех пакетов для базы данных

Этот пример получает все новые пакеты из локальной файловой системы и устанавливает пакеты в базу данных [TestDB]. Так как владелец не определен, список включает все пакеты, которые были установлены для частных и общих областей.

connectionString <- "Driver=SQL Server;Server=myServer;Database=TestDB;Trusted_Connection=True;"
computeContext <- RxInSqlServer(connectionString = connectionString )
rxSyncPackages(computeContext=computeContext, verbose=TRUE)

Пример 2. Ограничение синхронизированных пакетов по области

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

#Shared scope
rxSyncPackages(computeContext=computeContext, scope="shared", verbose=TRUE)

#Private scope
rxSyncPackages(computeContext=computeContext, scope="private", verbose=TRUE)

Пример 3. Ограничение синхронизированных пакетов по владельцу

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

rxSyncPackages(computeContext=computeContext, scope="private", owner = "user1", verbose=TRUE))

Управление пакетами R для SQL Server