Share via


Criar uma ligação de dados do Event Grid para o Azure Data Explorer com SDKs

Neste artigo, vai aprender a ingerir blobs da sua conta de armazenamento no Azure Data Explorer através de uma ligação de dados do Event Grid. Irá criar uma ligação de dados do Event Grid que define uma subscrição Azure Event Grid. A subscrição do Event Grid encaminha eventos da sua conta de armazenamento para o Azure Data Explorer através de um Hubs de Eventos do Azure.

Para saber como criar a ligação no portal do Azure ou com um modelo do ARM, veja Criar uma ligação de dados do Event Grid.

Para obter informações gerais sobre como ingerir no Azure Data Explorer do Event Grid, veja Ligar ao Event Grid.

Nota

Para obter o melhor desempenho com a ligação do Event Grid, defina a rawSizeBytes propriedade ingestão através dos metadados do blob. Para obter mais informações, veja Propriedades de ingestão.

Para exemplos de código baseados em versões anteriores do SDK, veja o artigo arquivado.

Pré-requisitos

Criar uma ligação de dados do Event Grid

Nesta secção, vai estabelecer uma ligação entre o Event Grid e a sua tabela de Data Explorer do Azure.

  1. Instale o pacote Microsoft.Azure.Management.Kusto NuGet.

  2. Crie um Microsoft Entra principal de aplicação para utilizar para autenticação. Precisará do ID do diretório (inquilino), do ID da aplicação e do segredo do cliente.

  3. Execute o seguinte código.

    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);
    
    Definição Valor sugerido Descrição do campo
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxx O ID do inquilino. Também conhecido como ID de diretório.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxx O ID da subscrição que utiliza para a criação de recursos.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxxxx O ID de cliente da aplicação que pode aceder aos recursos no seu inquilino.
    clientSecret Marcador de PosiçãoClientSecret O segredo do cliente da aplicação que pode aceder aos recursos no seu inquilino.
    resourceGroupName testrg O nome do grupo de recursos que contém o cluster.
    clusterName mykustocluster O nome do cluster.
    databaseName mykustodatabase O nome da base de dados de destino no cluster.
    eventGridConnectionName myeventgridconnect O nome pretendido da sua ligação de dados.
    tableName StormEvents O nome da tabela de destino na base de dados de destino.
    mappingRuleName StormEvents_CSV_Mapping O nome do mapeamento de colunas relacionado com a tabela de destino.
    dataFormat csv O formato de dados da mensagem.
    eventHubResourceId ID do Recurso O ID de recurso do hub de eventos onde o Event Grid está configurado para enviar eventos.
    storageAccountResourceId ID do Recurso O ID de recurso da sua conta de armazenamento que contém os dados para ingestão.
    consumerGroup $Default O grupo de consumidores do seu hub de eventos.
    localização E.U.A. Central A localização do recurso de ligação de dados.
    blobStorageEventType Microsoft.Storage.BlobCreated O tipo de evento que aciona a ingestão. Os eventos suportados são: Microsoft.Storage.BlobCreated ou Microsoft.Storage.BlobRenamed. O nome do blob é suportado apenas para o armazenamento do ADLSv2.
    databaseRouting Multi ou Single O encaminhamento da base de dados para a ligação. Se definir o valor como Único, a ligação de dados será encaminhada para uma única base de dados no cluster, conforme especificado na definição databaseName . Se definir o valor como Multi, pode substituir a base de dados de destino predefinida com a propriedade Ingestão de basesde dados. Para obter mais informações, veja Encaminhamento de eventos.

Utilizar a ligação de dados do Event Grid

Esta secção mostra como acionar a ingestão do Armazenamento de Blobs do Azure ou do Azure Data Lake Gen2 para o cluster após a criação de blobs ou o nome do blob.

Selecione o separador relevante com base no tipo de SDK de armazenamento utilizado para carregar blobs.

O seguinte exemplo de código utiliza o SDK Armazenamento de Blobs do Azure para carregar um ficheiro para Armazenamento de Blobs do Azure. O carregamento aciona a ligação de dados do Event Grid, que ingere os dados no 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

O Azure Data Explorer não elimina os blobs após a ingestão. Mantenha os blobs durante três a cinco dias com o ciclo de vida do armazenamento de Blobs do Azure para gerir a eliminação de blobs.

Nota

Acionar a ingestão após uma CopyBlob operação não é suportado para contas de armazenamento que tenham a funcionalidade de espaço de nomes hierárquico ativada.

Remover uma ligação de dados do Event Grid

Para remover a ligação do Event Grid, execute o seguinte comando:

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