Compartir a través de


Creación de una conexión de datos de Event Grid para Azure Data Explorer con SDK

En este artículo, aprenderá a ingerir blobs desde la cuenta de almacenamiento en Azure Data Explorer mediante una conexión de datos de Event Grid. Creará una conexión de datos de Event Grid que establece una suscripción de Azure Event Grid. La suscripción de Event Grid enruta los eventos desde la cuenta de almacenamiento a Azure Data Explorer mediante Azure Event Hubs.

Para obtener información sobre cómo crear la conexión en Azure Portal o con una plantilla de ARM, consulte Creación de una conexión de datos de Event Grid.

Para información general sobre la ingesta en Azure Data Explorer desde Event Grid, consulte Conexión a Event Grid.

Nota:

Para lograr el mejor rendimiento con la conexión de Event Grid, establezca la propiedad de ingesta rawSizeBytes a través de los metadatos del blob. Para obtener más información, vea propiedades de ingesta.

Para obtener ejemplos de código basados en versiones anteriores del SDK, consulte el artículo archivado.

Requisitos previos

Creación de una conexión de datos de Event Grid

En esta sección, establecerá una conexión entre Event Grid y la tabla de Azure Data Explorer.

  1. Instale el paquete Microsoft.Azure.Management.Kusto NuGet.

  2. Cree una entidad de seguridad de aplicación de Microsoft Entra para usarla para la autenticación. Necesitará el identificador de directorio (inquilino), el identificador de aplicación y el secreto de cliente.

  3. Ejecute el código siguiente:

    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);
    
    Configuración Valor sugerido Descripción del campo
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx El identificador de inquilino. También conocido como identificador de directorio.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Identificador de suscripción que se usa para la creación de recursos.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Identificador del cliente de la aplicación que puede acceder a los recursos del inquilino.
    clientSecret PlaceholderClientSecret Secreto del cliente de la aplicación que puede acceder a los recursos del inquilino.
    resourceGroupName testrg Nombre del grupo de recursos que contiene el clúster.
    clusterName mykustocluster Nombre del clúster.
    databaseName mykustodatabase Nombre de la base de datos de destino del clúster.
    eventGridConnectionName myeventgridconnect Nombre que desea asignar a la conexión de datos.
    tableName StormEvents Nombre de la tabla de destino de la base de datos de destino.
    mappingRuleName StormEvents_CSV_Mapping Nombre de la asignación de columnas asociada a la tabla de destino.
    dataFormat csv Formato de datos del mensaje.
    eventHubResourceId Identificador del recurso Identificador del recurso del centro de eventos en el que se ha configurado Event Grid para que envíe eventos.
    storageAccountResourceId Identificador del recurso Identificador del recurso de la cuenta de almacenamiento que contiene los datos que se van a ingerir.
    consumerGroup $Default Grupo de consumidores del centro de eventos.
    ubicación Centro de EE. UU. Ubicación del recurso de conexión de datos.
    blobStorageEventType Microsoft.Storage.BlobCreated Tipo de evento que desencadena la ingesta. Los eventos admitidos son: Microsoft.Storage.BlobCreated o Microsoft.Storage.BlobRenamed. El cambio de nombre de blobs solo se admite para el almacenamiento de ADLSv2.
    databaseRouting Múltiple o Sencillo Enrutamiento de la base de datos para la conexión. Si establece el valor en Sencillo, la conexión de datos se enruta a una base de datos única del clúster, tal y como se especifica en la opción databaseName. Si establece el valor en Múltiple, puede invalidar la base de datos de destino predeterminada mediante la propiedad de ingesta Base de datos. Para más información, consulte Enrutamiento de eventos.

Usar la conexión de datos de Event Grid

En esta sección se muestra cómo desencadenar la ingesta desde Azure Blob Storage o Azure Data Lake Gen 2 al clúster después de la creación del blob o el cambio de nombre del blob.

Seleccione la pestaña pertinente en función del tipo de SDK de almacenamiento que se usa para cargar blobs.

En el ejemplo de código siguiente se usa el SDK de Azure Blob Storage para cargar un archivo en Azure Blob Storage. La carga desencadena la conexión de datos de Event Grid, que ingiere los datos en 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();

Nota:

Azure Data Explorer no eliminará los blobs con posterioridad a la ingesta. Conserve los blobs de tres a cinco días mediante el ciclo de vida de Azure Blob Storage para administrar la eliminación de blobs.

Nota:

No se admite el desencadenamiento de la ingesta después de una operación CopyBlob para las cuentas de almacenamiento que tienen habilitada la característica de espacio de nombres jerárquico.

Importante

No se recomienda generar eventos de almacenamiento a partir de código personalizado y enviarlos a Event Hubs. Si decide hacerlo, asegúrese de que los eventos producidos cumplen estrictamente el esquema de eventos de almacenamiento y las especificaciones de formato JSON adecuadas.

Eliminar una conexión de datos de Event Grid

Para quitar la conexión de Event Grid, ejecute el siguiente comando:

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