Использование баз данных подписчиков

Функция базы данных подписчиков позволяет присоединить базу данных, расположенную в другом кластере, к кластеру Azure Data Explorer. База данных подписчиков присоединяется в режиме только для чтения, что позволяет просматривать данные и выполнять запросы по данным, которые были переданы в базу данных руководителя. База данных подписчика синхронизирует изменения в базах данных руководителя. Из-за синхронизации данных возможны задержки доступа к данным продолжительностью от нескольких секунд до нескольких минут. Продолжительность временной задержки зависит от общего размера метаданных базы данных руководителя. Базы данных руководителя и подписчиков используют одну учетную запись хранения для выборки данных. Владельцем хранилища является руководитель базы данных. База данных подписчика считывает данные без необходимости их приема. Поскольку присоединенная база данных доступна только для чтения, данные, таблицы и политики в базе данных нельзя изменить, за исключением политики кэширования, субъектов и разрешений. Подключенные базы данных нельзя удалить. Сначала руководитель или подписчик должен отключить их, и только после этого их можно удалить.

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

Примеры кода на основе предыдущих версий пакета SDK см. в архивной статье.

На какие базы данных можно подписываться?

  • Кластер может подписываться к одной базе данных, нескольким базам данных или всем базам данных в кластере руководителя.
  • Один кластер может подписываться на базы данных из нескольких серверов руководителя.
  • Кластер может содержать как базы данных подписчиков, так и базы данных руководителя.

Предварительные требования

Присоединение базы данных

Существует несколько методов для присоединения базы данных. В этой статье обсуждается подключение базы данных с помощью C#, Python, PowerShell или шаблона Azure Resource Manager. Чтобы присоединить базу данных, необходимо иметь учетную запись пользователя, группы, субъекта-службы или управляемое удостоверение по крайней мере с ролью участника в кластере руководителя и в кластере подписчика. Добавьте или удалите назначения ролей с помощью портала Azure, PowerShell, Azure CLI и шаблона ARM. Узнайте больше об управлении доступом на основе ролей Azure (Azure RBAC) и различных ролях.

Общий доступ на уровне таблиц

При присоединении базы данных подписчики также могут читать все таблицы, внешние таблицы и материализованные представления. Вы можете предоставить общий доступ к конкретным таблицам, внешним таблицам или материализованным представлениям, настроив параметр TableLevelSharingProperties.

TableLevelSharingProperties содержит восемь массивов строк: tablesToInclude, tablesToExclude, , externalTablesToIncludeexternalTablesToExclude, materializedViewsToInclude, materializedViewsToExcludefunctionsToInclude, и functionsToExclude. Максимальное число записей во всех массивах равно 100.

Примечание

  • Общий доступ на уровне таблиц не поддерживается при использовании нотации "*" (все таблицы).
  • Если включены материализованные представления, также включаются их исходные таблицы.

Примеры

  1. Включите все таблицы. «*» не требуется, так как по умолчанию подписчикам доступны все таблицы:

    tablesToInclude = []
    
  2. Включите все таблицы с именами, начинающимися с «Logs»:

    tablesToInclude = ["Logs*"]
    
  3. Исключите все внешние таблицы:

    externalTablesToExclude = ["*"]
    
  4. Исключите все материализованные представления:

    materializedViewsToExclude=["*"]
    

Переопределение имени базы данных

При необходимости можно сделать имя базы данных в кластере подписчиков отличным от имени ведущего кластера. Например, может потребоваться присоединить одно и то же имя базы данных из нескольких кластеров-лидеров к кластеру подписчиков. Чтобы указать другое имя базы данных, настройте свойство DatabaseNameOverride или DatabaseNamePrefix.

Присоединение базы данных с помощью языка C#

Необходимые пакеты NuGet

Пример в C#

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfigurations = cluster.GetKustoAttachedDatabaseConfigurations();
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new KustoAttachedDatabaseConfigurationData
{
    ClusterResourceId = new ResourceIdentifier($"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}"),
    DatabaseName = "<databaseName>", // Can be a specific database name in a leader cluster or * for all databases
    DefaultPrincipalsModificationKind = KustoDatabaseDefaultPrincipalsModificationKind.Union,
    Location = AzureLocation.NorthCentralUS
};
// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
    // Set up the table level sharing properties - the following is just an example.
    attachedDatabaseConfigurationData.TableLevelSharingProperties = new KustoDatabaseTableLevelSharingProperties();
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToInclude.Add("table1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToExclude.Add("table2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToExclude.Add("exTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToInclude.Add("exTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToInclude.Add("matTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToExclude.Add("matTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToInclude.Add("func1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToExclude.Add("func2");
}
await attachedDatabaseConfigurations.CreateOrUpdateAsync(WaitUntil.Completed, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData);

Убедитесь в успешном присоединении базы данных

Чтобы убедиться, что база данных была успешно присоединена, найдите подключенные базы данных на портале Azure. Вы можете убедиться, что базы данных были успешно присоединены в кластерах подписчиков или руководителей.

Проверьте кластер подписчиков

  1. Перейдите к кластеру подписчиков и выберите Базы данных.

  2. В списке баз данных найдите новые базы данных, доступные только для чтения.

    Снимок экрана: базы данных подписчиков только для чтения на портале.

    Этот список также можно просмотреть на странице обзора базы данных:

    Снимок экрана: страница обзора баз данных со списком кластеров подписчиков.

Проверьте кластер руководителя

  1. Перейдите к кластеру-лидеру и выберите Базы данных.

  2. Убедитесь, что соответствующие базы данных отмечены как ДОСТУПНО ДРУГИМДа

  3. Переключите ссылку на связь, чтобы просмотреть сведения.

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

    Это также можно просмотреть на странице обзора базы данных:

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

Отсоединение базы данных подписчиков

Примечание

Чтобы отсоединить базу данных от подписчиков или руководителя, у вас должна быть учетная запись пользователя, группы, субъекта-службы или управляемое удостоверение как минимум с ролью участника в кластере, из которой выполняется отсоединение базы данных. В приведенном ниже примере используется субъект-служба.

Отсоединение присоединенной базы данных подписчиков от кластера подписчиков с помощью C#**

Кластер подписчиков может отключить любую присоединенную базу данных подписчиков, как показано ниже:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfiguration = (await cluster.GetKustoAttachedDatabaseConfigurationAsync(attachedDatabaseConfigurationsName)).Value;
await attachedDatabaseConfiguration.DeleteAsync(WaitUntil.Completed);

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

Кластер руководителя может отключить любую присоединенную базу данных следующим образом:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, leaderSubscriptionId);
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(leaderResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(leaderClusterName)).Value;
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new KustoFollowerDatabaseDefinition(
    clusterResourceId: new ResourceIdentifier($"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}"),
    attachedDatabaseConfigurationName: attachedDatabaseConfigurationsName
);
await cluster.DetachFollowerDatabasesAsync(WaitUntil.Completed, followerDatabaseDefinition);

Управление субъектами, разрешениями и политикой кэширования

Управление субъектами

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

Вид Описание
Union Присоединенные субъекты базы данных всегда включают исходные субъекты базы данных и другие новые субъекты, добавленные в базу данных подписчиков.
Заменить Нет наследования субъектов от исходной базы данных. Для присоединенной базы данных необходимо создать новые субъекты.
None Присоединенные субъекты базы данных включают только субъекты исходной базы данных без других субъектов.

Дополнительные сведения об использовании команд управления для настройки авторизованных субъектов см. в статье Команды управления для управления кластером подписчиков.

Управление разрешениями

Управление разрешением на доступ к базе данных только для чтения осуществляется так же, как и для всех типов баз данных. Сведения о назначении разрешений см. в статье Управление разрешениями базы данных в портал Azure или использование команд управления для управления ролями безопасности базы данных.

Настройка политики кэширования

Администратор базы данных подписчиков может изменить политику кэширования присоединенной базы данных или любой из ее таблиц в кластере размещения. По умолчанию базы данных-источника в базе данных ведущего кластера и политики кэширования на уровне таблиц объединяются с политиками, определенными в базе данных, и политиками переопределения на уровне таблиц. Например, можно использовать политику кэширования на протяжении 30 дней в базе данных руководителя для ежемесячного создания отчетов и политику кэширования на протяжении трех дней в базе данных подписчиков, чтобы запрашивать только последние данные по устранению неполадок. Дополнительные сведения об использовании команд управления для настройки политики кэширования в базе данных или таблице подписчиков см. в разделе Команды управления для управления кластером подписчиков.

Примечания

  • При возникновении конфликтов между базами данных в кластерах руководителя и подписчиков, если за всеми базами данных следит кластер подписчиков, они разрешаются следующим образом:
    • База данных с именем DB, созданная в кластере подписчиков, имеет приоритет над базой данных с тем же именем, которая была создана в кластере руководителя. Именно поэтому необходимо удалить или переименовать базу данных DB в кластере подписчиков, чтобы включить базу данных DB руководителя.
    • База данных с именем DB, за которой следят два или больше кластеров руководителя, произвольно выбирается из одного из кластеров руководителя и отслеживается не более одного раза.
  • Команды для отображения журнала и истории действий в кластере, выполняются в кластере подписчиков и показывают активность и историю в кластере подписчиков, и их результирующие наборы не будут содержать результаты кластеров руководителя.
    • Например, команда .show queries, выполняемая в кластере подписчиков, позволяет просмотреть только запросы, запущенные в базах данных, за которыми следит кластер подписчиков, но не запросы, выполняемые в той же базе данных в кластере руководителя.

Ограничения

  • Кластеры подписчиков и руководителя должны находиться в одном регионе.
  • Если для отслеживаемой базы данных применяется Потоковый прием данных, кластер подписчиков также должен использовать потоковый прием данных, чтобы обрабатывать отслеживание данных потокового приема.
  • Использование кластера с шифрованием данных с помощью управляемых клиентом ключей (CMK) поддерживается со следующими ограничениями:
    • Ни кластер подписчиков, ни кластер-лидер не следуют за другими кластерами.
    • Если кластер подписчиков следует за кластером лидеров с включенным CMK и доступ лидера к ключу отменяется, кластеры лидера и подписчика будут приостановлены. В этом случае можно либо устранить проблему CMK, а затем возобновить кластер подписчиков, либо отключить базы данных подписчиков от кластера подписчиков и возобновить работу независимо от кластера-лидера.
  • Невозможно удалить базу данных, присоединенную к другому кластеру, не отсоединив ее.
  • Невозможно удалить кластер, к которому присоединена база данных, присоединенная к другому кластеру, не отсоединив ее.
  • Свойства общего доступа на уровне таблицы не поддерживаются при выполнении действий по всем базам данных.
  • В базах данных подписчиков для запроса внешних таблиц, использующих управляемое удостоверение в качестве метода проверки подлинности, необходимо добавить управляемое удостоверение в кластер подписчиков. Эта возможность не работает, когда кластеры лидеров и подписчиков подготавливаются в разных клиентах.

Следующий шаг