Partilhar via


Criar uma conexão de dados da Grade de Eventos para o Azure Data Explorer com SDKs

Neste artigo, aprende como ingerir os blobs da sua conta de armazenamento no Azure Data Explorer usando uma ligação de dados Event Grid. Você criará uma conexão de dados do Event Grid que estabelece uma subscrição do Azure Event Grid. A subscrição da Grelha de Eventos encaminha eventos da sua conta de armazenamento para o Azure Data Explorer através de Hubs de Eventos do Azure.

Para saber como criar a conexão no portal do Azure ou com um modelo ARM, consulte Criar uma conexão de dados da Grade de Eventos.

Para obter informações gerais sobre a importação de dados no Azure Data Explorer a partir do Event Grid, consulte Conectar-se ao Event Grid.

Observação

Para obter o melhor desempenho com a conexão de grade de eventos, defina a rawSizeBytes propriedade de ingestão por meio dos metadados de blob. Para obter mais informações, consulte Propriedades de ingestão.

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

Pré-requisitos

Criar uma conexão de dados da Grade de Eventos

Nesta seção, você estabelecerá uma conexão entre a Grade de Eventos e sua tabela do Azure Data Explorer.

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

  2. Crie uma entidade de aplicação Microsoft Entra para utilizar para autenticação. Você precisará do ID do diretório (locatário), do ID do aplicativo e da chave secreta do cliente.

  3. Execute o código a seguir.

    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);
    
    Setting Valor sugerido Descrição do campo
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx O ID do inquilino. Também conhecido como ID de diretório.
    ID de subscrição xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx A ID de assinatura que você usa para a criação de recursos.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx A ID do cliente do aplicativo que pode acessar recursos em seu locatário.
    clientSecret PlaceholderClientSecret O segredo do cliente do aplicativo que pode acessar recursos em seu locatário.
    resourceGroupName Testrg O nome do grupo de recursos que contém o cluster.
    nome_do_cluster Mykustocluster O nome do seu cluster.
    databaseName mykustodatabase O nome do banco de dados de destino no cluster.
    eventGridConnectionName MyEventGridConnect O nome desejado da sua conexão de dados.
    tableName StormEvents O nome da tabela de destino no banco de dados de destino.
    nomeDaRegraDeMapeamento StormEvents_CSV_Mapping O nome do mapeamento de colunas relacionado à tabela de destino.
    formato de dados CSV O formato de dados da mensagem.
    ID do recurso do Event Hub ID do recurso O ID do recurso do hub de eventos onde o Event Grid está configurado para enviar eventos.
    storageAccountResourceId ID do recurso O ID do recurso da sua conta de armazenamento que contém os dados para ingestão.
    Grupo de consumidores $Default O grupo de consumidores do seu hub de eventos.
    localização Centro dos EUA O local do recurso de conexão de dados.
    blobStorageEventType Microsoft.Storage.BlobCreated O tipo de evento que desencadeia a ingestão. Os eventos suportados são: Microsoft.Storage.BlobCreated ou Microsoft.Storage.BlobRenamed. A renomeação de Blob é suportada apenas para armazenamento ADLSv2.
    roteamento de base de dados Multi ou Single O roteamento de banco de dados para a conexão. Se você definir o valor como Single, a conexão de dados será roteada para um único banco de dados no cluster, conforme especificado na configuração databaseName . Se você definir o valor como Multi, poderá substituir o banco de dados de destino padrão usando a propriedade Databaseingestion. Para obter mais informações, consulte Roteamento de eventos.

Usar a conexão de dados do Event Grid

Esta seção mostra como iniciar a ingestão a partir do Armazenamento de Blobs do Azure ou do Azure Data Lake Gen 2 para o seu cluster após a criação ou o renomear de um blob.

Selecione a guia relevante com base no tipo de SDK de armazenamento usado para carregar blobs.

O exemplo de código a seguir usa o SDK de Armazenamento de Blob do Azure para carregar um arquivo no Armazenamento de Blobs do Azure. O carregamento aciona a conexão de dados da Grade de Eventos, 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();

Observação

O Azure Data Explorer não excluirá os blobs após a ingestão. Retenha os blobs por três a cinco dias usando o ciclo de vida do armazenamento de Blob do Azure para gerenciar a exclusão de blobs.

Observação

Não há suporte para acionar a ingestão após uma CopyBlob operação para contas de armazenamento que tenham o recurso de namespace hierárquico habilitado nelas.

Importante

Desencorajamos muito a geração de Eventos de Armazenamento a partir de código personalizado e o envio para Hubs de Eventos. Se você optar por fazer isso, certifique-se de que os eventos produzidos sigam estritamente o esquema de eventos de armazenamento apropriado e as especificações de formato JSON.

Remover uma conexão de dados da Grade de Eventos

Para remover a conexão da grade de eventos, execute o seguinte comando:

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