Partager via


Créer une connexion de données Event Grid pour Azure Data Explorer à l’aide de Kits de développement logiciel (SDK)

Cet article vous montre comment ingérer des objets blob de votre compte de stockage vers Azure Data Explorer en utilisant une connexion de données Event Grid. Vous allez créer une connexion de données Event Grid qui définit un abonnement Azure Event Grid. L’abonnement Event Grid route les événements de votre compte de stockage vers Azure Data Explorer via un hub d’événements Azure.

Pour savoir comment créer la connexion dans le Portail Azure ou avec un modèle ARM, consultez Créer une connexion de données Event Grid.

Pour obtenir des informations générales sur l’ingestion dans Azure Data Explorer à partir d’Event Grid, consultez Se connecter à Event Grid.

Remarque

Pour obtenir des performances optimales avec la connexion Event Grid, définissez la propriété d’ingestion rawSizeBytes via les métadonnées du blob. Pour plus d’informations, consultez Propriétés d’ingestion.

Pour obtenir des exemples de code fondés sur les versions précédentes du Kit de développement logiciel (SDK), consultez l’article archivé.

Prérequis

Créer une connexion de données à Event Grid

Dans cette section, vous allez établir une connexion entre Event Grid et votre table Azure Data Explorer.

  1. Installez le package NuGet Microsoft.Azure.Management.Kusto.

  2. Créez un principal d’application Microsoft Entra à utiliser pour l’authentification. Vous aurez besoin de l’ID (de locataire) d’annuaire, de l’ID d’application et de la clé secrète client.

  3. Exécutez le code suivant.

    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);
    
    Paramètre Valeur suggérée Description du champ
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Votre ID de client. Également appelé ID de répertoire.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx ID d’abonnement que vous utilisez pour la création de ressources.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx ID client de l’application qui peut accéder aux ressources figurant dans votre locataire.
    clientSecret PlaceholderClientSecret Secret client de l’application qui peut accéder aux ressources figurant dans votre locataire.
    resourceGroupName testrg Nom du groupe de ressources qui contient votre cluster.
    clusterName mykustocluster Nom de votre cluster.
    databaseName mykustodatabase Nom de la base de données cible dans votre cluster.
    eventGridConnectionName myeventgridconnect Nom souhaité de votre connexion de données.
    tableName StormEvents Nom de la table cible dans la base de données cible.
    mappingRuleName StormEvents_CSV_Mapping Nom de votre mappage de colonnes associé à la table cible.
    dataFormat csv Format de données du message.
    eventHubResourceId ID de ressource ID de ressource de votre hub d’événements où la grille d’événements est configurée pour envoyer des événements.
    storageAccountResourceId ID de ressource ID de ressource de votre compte de stockage qui contient les données à des fins d’ingestion.
    consumerGroup $Default Groupe de consommateurs de votre hub d’événements.
    location USA Centre Emplacement de la ressource de connexion de données.
    blobStorageEventType Microsoft.Storage.BlobCreated Type d’événement qui déclenche l’ingestion. Les événements pris en charge sont : Microsoft.Storage.BlobCreated ou Microsoft.Storage.BlobRenamed. Le renommage d’objets blob est pris en charge uniquement pour le stockage ADLSv2.
    databaseRouting Multi ou Single Routage de la base de données pour la connexion. Si vous définissez la valeur sur Single, la connexion de données est routée vers une base de données unique dans le cluster, comme spécifié dans le paramètre databaseName. Si vous définissez la valeur sur Multi, vous pouvez remplacer la base de données cible par défaut en utilisant la propriété ingestion de la base de données. Pour plus d’informations, consultez Routage des événements.

Utiliser une connexion de données Event Grid

Dans cette section, vous allez découvrir comment déclencher l’ingestion à partir de Stockage Blob Azure ou d’Azure Data Lake Gen 2 vers votre cluster après la création d’un blob ou le changement de nom d’un blob.

Sélectionnez l’onglet approprié en fonction du type de Kit de développement logiciel (SDK) de stockage utilisé pour charger des blobs.

L’exemple de code suivant utilise le Kit de développement logiciel (SDK) Stockage Blob Azure pour charger un fichier dans Stockage Blob Azure. Le chargement déclenche la connexion de données Event Grid, qui ingère les données dans 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();

Remarque

Azure Data Explorer ne supprimera pas les objets blob après l’ingestion. Conservez les blobs pendant trois à cinq jours en utilisant le cycle de vie du Stockage Blob Azure pour gérer la suppression des blobs.

Remarque

Le déclenchement de l’ingestion après une opération CopyBlob n’est pas pris en charge pour les comptes de stockage sur lesquels la fonctionnalité d’espace de noms hiérarchique est activée.

Important

Nous déconseillons vivement de générer des événements de stockage à partir de code personnalisé et de les envoyer à Event Hubs. Si vous choisissez de le faire, assurez-vous que les événements produits respectent strictement le schéma approprié des événements de stockage et les spécifications de format JSON.

Supprimer une connexion de données Event Grid

Pour supprimer la connexion Event Grid, exécutez la commande suivante :

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