Udostępnij za pośrednictwem


Tworzenie połączenia danych usługi Event Grid dla usługi Azure Data Explorer za pomocą zestawów SDK

Z tego artykułu dowiesz się, jak pozyskiwać obiekty blob z konta magazynu do usługi Azure Data Explorer przy użyciu połączenia danych usługi Event Grid. Utworzysz połączenie danych usługi Event Grid, które ustawia subskrypcję usługi Azure Event Grid . Subskrypcja usługi Event Grid kieruje zdarzenia z konta magazynu do usługi Azure Data Explorer za pośrednictwem usługi Azure Event Hubs.

Aby dowiedzieć się, jak utworzyć połączenie w witrynie Azure Portal lub przy użyciu szablonu usługi ARM, zobacz Tworzenie połączenia danych usługi Event Grid.

Aby uzyskać ogólne informacje na temat pozyskiwania do usługi Azure Data Explorer z usługi Event Grid, zobacz Nawiązywanie połączenia z usługą Event Grid.

Uwaga

Aby uzyskać najlepszą wydajność połączenia usługi Event Grid, ustaw rawSizeBytes właściwość pozyskiwania za pośrednictwem metadanych obiektu blob. Aby uzyskać więcej informacji, zobacz właściwości pozyskiwania.

Przykłady kodu oparte na poprzednich wersjach zestawu SDK można znaleźć w zarchiwizowanym artykule.

Wymagania wstępne

Tworzenie połączenia danych usługi Event Grid

W tej sekcji ustanowisz połączenie między usługą Event Grid i tabelą usługi Azure Data Explorer.

  1. Zainstaluj pakiet NuGet Microsoft.Azure.Management.Kusto.

  2. Utwórz jednostkę aplikacji Firmy Microsoft Entra do użycia na potrzeby uwierzytelniania. Będziesz potrzebować identyfikatora katalogu (dzierżawy), identyfikatora aplikacji i klucza tajnego klienta.

  3. Uruchom następujący kod.

    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);
    
    Ustawienie Sugerowana wartość Opis pola
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Identyfikator dzierżawy. Znany również jako identyfikator katalogu.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Identyfikator subskrypcji używany do tworzenia zasobów.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx Identyfikator klienta aplikacji, która może uzyskiwać dostęp do zasobów w dzierżawie.
    clientSecret Symbol zastępczyClientSecret Klucz tajny klienta aplikacji, który może uzyskiwać dostęp do zasobów w dzierżawie.
    resourceGroupName testrg Nazwa grupy zasobów zawierającej klaster.
    clusterName mykustocluster Nazwa klastra.
    databaseName mykustodatabase Nazwa docelowej bazy danych w klastrze.
    eventGridConnectionName myeventgridconnect Żądana nazwa połączenia danych.
    tableName StormEvents Nazwa tabeli docelowej w docelowej bazie danych.
    mappingRuleName StormEvents_CSV_Mapping Nazwa mapowania kolumny powiązana z tabelą docelową.
    dataFormat csv Format danych wiadomości.
    eventHubResourceId Identyfikator zasobu Identyfikator zasobu centrum zdarzeń, w którym usługa Event Grid jest skonfigurowana do wysyłania zdarzeń.
    storageAccountResourceId Identyfikator zasobu Identyfikator zasobu konta magazynu, który przechowuje dane do pozyskiwania.
    consumerGroup $Default Grupa odbiorców centrum zdarzeń.
    lokalizacja Środkowe stany USA Lokalizacja zasobu połączenia danych.
    blobStorageEventType Microsoft.Storage.BlobCreated Typ zdarzenia wyzwalającego pozyskiwanie. Obsługiwane zdarzenia to: Microsoft.Storage.BlobCreated lub Microsoft.Storage.BlobRenamed. Zmiana nazw obiektów blob jest obsługiwana tylko w przypadku magazynu ADLSv2.
    databaseRouting Wiele lub pojedynczy Routing bazy danych dla połączenia. Jeśli ustawisz wartość Na pojedynczą, połączenie danych zostanie przekierowane do pojedynczej bazy danych w klastrze, jak określono w ustawieniu databaseName . Jeśli ustawisz wartość Na wiele, możesz zastąpić domyślną docelową bazę danych przy użyciu właściwości Pozyskiwanie bazy danych. Aby uzyskać więcej informacji, zobacz Routing zdarzeń.

Korzystanie z połączenia danych usługi Event Grid

W tej sekcji pokazano, jak wyzwolić pozyskiwanie z usługi Azure Blob Storage lub Azure Data Lake Gen 2 do klastra po utworzeniu obiektu blob lub zmianie nazwy obiektu blob.

Wybierz odpowiednią kartę na podstawie typu zestawu SDK magazynu używanego do przekazywania obiektów blob.

Poniższy przykładowy kod używa zestawu SDK usługi Azure Blob Storage do przekazania pliku do usługi Azure Blob Storage. Przekazywanie wyzwala połączenie danych usługi Event Grid, które pozyskuje dane do usługi 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();

Uwaga

Usługa Azure Data Explorer nie usunie obiektów blob po pozyskaniu. Zachowaj obiekty blob przez od trzech do pięciu dni przy użyciu cyklu życia usługi Azure Blob Storage, aby zarządzać usuwaniem obiektów blob.

Uwaga

Wyzwalanie pozyskiwania po CopyBlob operacji nie jest obsługiwane w przypadku kont magazynu z włączoną funkcją hierarchicznej przestrzeni nazw.

Ważne

Zdecydowanie odradzamy generowanie zdarzeń magazynu z niestandardowego kodu i wysyłanie ich do usługi Event Hubs. Jeśli zdecydujesz się to zrobić, upewnij się, że zdarzenia generowane ściśle są zgodne ze specyfikacjami odpowiedniego schematu zdarzeń magazynu i formatu JSON.

Usuwanie połączenia danych usługi Event Grid

Aby usunąć połączenie usługi Event Grid, uruchom następujące polecenie:

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