Поделиться через


Создание подключения к данным сетки событий для Azure Data Explorer с помощью пакетов SDK

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

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

Общие сведения о передаче данных в Azure Data Explorer из сетки событий см. в разделе Подключение к сетке событий.

Примечание.

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

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

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

Создание подключения к данным в Сетке событий

В этом разделе описано, как установить соединение между сеткой событий и таблицей Azure Data Explorer.

  1. Установите пакет NuGet Microsoft.Azure.Management.Kusto.

  2. Создайте субъект приложения Microsoft Entra для проверки подлинности. Вам потребуется идентификатор каталога (клиента), идентификатор приложения и секрет клиента.

  3. Выполните следующий код.

    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 subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
    var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
    var resourceManagementClient = new ArmClient(credentials, subscriptionId);
    var resourceGroupName = "testrg";
    //The cluster and database that are created as part of the Prerequisites
    var clusterName = "mykustocluster";
    var databaseName = "mykustodatabase";
    var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
    var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
    var cluster = (await resourceGroup.GetKustoClusterAsync(clusterName)).Value;
    var database = (await cluster.GetKustoDatabaseAsync(databaseName)).Value;
    var dataConnections = database.GetKustoDataConnections();
    var eventGridConnectionName = "myeventgridconnect";
    //The event hub and storage account that are created as part of the Prerequisites
    var eventHubResourceId = new ResourceIdentifier("/subscriptions/<storageAccountSubscriptionId>/resourceGroups/<storageAccountResourceGroupName>/providers/Microsoft.Storage/storageAccounts/<storageAccountName>");
    var storageAccountResourceId = new ResourceIdentifier("/subscriptions/<eventHubSubscriptionId>/resourceGroups/<eventHubResourceGroupName>/providers/Microsoft.EventHub/namespaces/<eventHubNamespaceName>/eventhubs/<eventHubName>");
    var consumerGroup = "$Default";
    var location = AzureLocation.CentralUS;
    //The table and column mapping are created as part of the Prerequisites
    var tableName = "StormEvents";
    var mappingRuleName = "StormEvents_CSV_Mapping";
    var dataFormat = KustoEventGridDataFormat.Csv;
    var blobStorageEventType = BlobStorageEventType.MicrosoftStorageBlobCreated;
    var databaseRouting = KustoDatabaseRouting.Multi;
    var eventGridConnectionData = new KustoEventGridDataConnection
    {
        StorageAccountResourceId = storageAccountResourceId, EventHubResourceId = eventHubResourceId,
        ConsumerGroup = consumerGroup, TableName = tableName, Location = location, MappingRuleName = mappingRuleName,
        DataFormat = dataFormat, BlobStorageEventType = blobStorageEventType, DatabaseRouting = databaseRouting
    };
    await dataConnections.CreateOrUpdateAsync(WaitUntil.Completed, eventGridConnectionName, eventGridConnectionData);
    
    Параметр Рекомендуемое значение Описание поля
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Идентификатор клиента. Также известен как идентификатор каталога.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Идентификатор подписки, используемой для создания ресурсов.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Идентификатор клиента приложения, которое имеет доступ к ресурсам в клиенте.
    clientSecret PlaceholderClientSecret Секрет клиента приложения, которое имеет доступ к ресурсам в клиенте.
    resourceGroupName testrg Имя группы ресурсов, содержащей ваш кластер.
    clusterName mykustocluster Имя вашего кластера.
    databaseName mykustodatabase Имя целевой базы данных в вашем кластере.
    eventGridConnectionName myeventgridconnect Необходимое имя вашего подключения для передачи данных.
    tableName StormEvents Имя целевой таблицы в целевой базе данных.
    mappingRuleName StormEvents_CSV_Mapping Имя сопоставления столбцов, связанного с целевой таблицей.
    dataFormat csv Формат данных сообщения.
    eventHubResourceId Идентификатор ресурса Идентификатор ресурса вашего концентратора событий, в котором Сетка событий настроена для отправки событий.
    storageAccountResourceId Идентификатор ресурса Идентификатор ресурса вашей учетной записи хранения, в которой хранятся данные для приема.
    consumerGroup $Default Группа потребителей вашего концентратора событий.
    расположение Центральная часть США Расположение ресурса подключения к данным.
    blobStorageEventType Microsoft.Storage.BlobCreated Тип события, запускающего загрузку. Поддерживаемые события: Microsoft.Storage.BlobCreated или Microsoft.Storage.BlobRenamed. Переименование BLOB-объектов поддерживается только для хранилища ADLSv2.
    databaseRouting Multi или Single Маршрутизация базы данных для подключения. Если задано значение Single, подключение к данным будет направляться в отдельную базу данных в кластере, как указано в параметре databaseName. Если задать значение Multi, можно переопределить целевую базу данных по умолчанию с помощью свойства приема базы данных. Дополнительные сведения см. в разделе Маршрутизация событий.

Использование подключения к данным сетки событий

В этом разделе показано, как активировать прием из Хранилище BLOB-объектов Azure или Azure Data Lake 2-го поколения в кластер после создания или переименования BLOB-объектов.

Выберите соответствующую вкладку на основе типа пакета SDK хранилища, используемого для отправки БОЛЬШИХ двоичных объектов.

В следующем примере кода используется пакет SDK Хранилище BLOB-объектов Azure для отправки файла в Хранилище BLOB-объектов Azure. Отправка активирует подключение к данным сетки событий, которое отправляет данные в Azure Data Explorer.

var azureStorageAccountConnectionString=<storage_account_connection_string>;
var containerName = <container_name>;
var blobName = <blob_name>;
var localFileName = <file_to_upload>;
var uncompressedSizeInBytes = <uncompressed_size_in_bytes>;
var mapping = <mappingReference>;
// Create a new container in your storage account.
var azureStorageAccount = CloudStorageAccount.Parse(azureStorageAccountConnectionString);
var blobClient = azureStorageAccount.CreateCloudBlobClient();
var container = blobClient.GetContainerReference(containerName);
container.CreateIfNotExists();
// Set metadata and upload a file to the blob.
var blob = container.GetBlockBlobReference(blobName);
blob.Metadata.Add("rawSizeBytes", uncompressedSizeInBytes);
blob.Metadata.Add("kustoIngestionMappingReference", mapping);
blob.UploadFromFile(localFileName);
// Confirm success of the upload by listing the blobs in your container.
var blobs = container.ListBlobs();

Примечание.

Azure Data Explorer не удаляет прием сообщений больших двоичных объектов. Храните большие двоичные объекты в течение трех-пяти дней, используя жизненный цикл хранилища BLOB-объектов Azure для управления удалением больших двоичных объектов.

Примечание.

Активация приема после CopyBlob операции не поддерживается для учетных записей хранения, для которых включена функция иерархического пространства имен.

Внимание

Мы настоятельно рекомендуем создавать события хранилища из пользовательского кода и отправлять их в Центры событий. Если вы решили сделать это, убедитесь, что события, созданные строго, соответствуют соответствующей схеме событий хранилища и спецификациям формата JSON.

Удаление подключения к данным сетки событий

Чтобы удалить подключение сетки событий, выполните следующую команду:

kustoManagementClient.DataConnections.Delete(resourceGroupName, clusterName, databaseName, dataConnectionName);