Sdílet prostřednictvím


Vytvoření datového připojení Event Gridu pro Azure Data Explorer pomocí sad SDK

V tomto článku se dozvíte, jak ingestovat objekty blob z účtu úložiště do Azure Data Exploreru pomocí datového připojení Event Gridu. Vytvoříte datové připojení Event Gridu, které nastaví odběr služby Azure Event Grid . Odběr služby Event Grid směruje události z vašeho účtu úložiště do Azure Data Exploreru prostřednictvím služby Azure Event Hubs.

Informace o vytvoření připojení na webu Azure Portal nebo pomocí šablony ARM najdete v tématu Vytvoření datového připojení Event Gridu.

Obecné informace o ingestování do Azure Data Exploreru z Event Gridu najdete v tématu Připojení k Event Gridu.

Poznámka:

Pokud chcete dosáhnout nejlepšího výkonu s připojením event Gridu, nastavte vlastnost příjmu rawSizeBytes dat prostřednictvím metadat objektů blob. Další informace najdete ve vlastnostech příjmu dat.

Ukázky kódu založené na předchozích verzích sady SDK najdete v archivovaného článku.

Požadavky

Vytvoření datového připojení Event Gridu

V této části vytvoříte propojení mezi Event Gridem a tabulkou Azure Data Exploreru.

  1. Nainstalujte balíček NuGet Microsoft.Azure.Management.Kusto.

  2. Vytvořte objekt zabezpečení aplikace Microsoft Entra, který se použije k ověřování. Budete potřebovat ID adresáře (tenanta), ID aplikace a tajný klíč klienta.

  3. Spusťte následující kód.

    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);
    
    Nastavení Navrhovaná hodnota Popis pole
    tenantId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx ID vašeho tenanta Označuje se také jako ID adresáře.
    subscriptionId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx ID předplatného, které používáte k vytvoření prostředku.
    clientId xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx ID klienta aplikace, která má přístup k prostředkům ve vašem tenantovi.
    clientSecret PlaceholderClientSecret Tajný klíč klienta aplikace, která má přístup k prostředkům ve vašem tenantovi.
    resourceGroupName testrg Název skupiny prostředků obsahující váš cluster.
    clusterName mykustocluster Název clusteru.
    databaseName mykustodatabase Název cílové databáze v clusteru
    eventGridConnectionName myeventgridconnect Požadovaný název datového připojení.
    tableName StormEvents Název cílové tabulky v cílové databázi.
    mappingRuleName StormEvents_CSV_Mapping Název mapování sloupců související s cílovou tabulkou.
    dataFormat csv Formát dat zprávy.
    eventHubResourceId ID prostředku ID prostředku vašeho centra událostí, kde je Event Grid nakonfigurovaný tak, aby odesílal události.
    storageAccountResourceId ID prostředku ID prostředku vašeho účtu úložiště, které obsahuje data pro příjem dat.
    consumerGroup $Default Skupina příjemců vašeho centra událostí.
    location USA – střed Umístění prostředku datového připojení
    blobStorageEventType Microsoft.Storage.BlobCreated Typ události, která aktivuje příjem dat. Podporované události jsou: Microsoft.Storage.BlobCreated nebo Microsoft.Storage.BlobRenamed. Přejmenování objektů blob se podporuje jenom pro úložiště ADLSv2.
    databaseRouting Více nebo jednoúčelový Směrování databáze pro připojení. Pokud nastavíte hodnotu Single, datové připojení se bude směrovat do izolované databáze v clusteru, jak je uvedeno v nastavení databaseName . Pokud nastavíte hodnotu na Více, můžete výchozí cílovou databázi přepsat pomocí vlastnosti Příjem dat databáze. Další informace naleznete v tématu Směrování událostí.

Použití datového připojení Event Gridu

Tato část ukazuje, jak aktivovat příjem dat ze služby Azure Blob Storage nebo Azure Data Lake Gen2 do clusteru po vytvoření objektu blob nebo přejmenování objektu blob.

Na základě typu sady SDK úložiště použitého k nahrání objektů blob vyberte příslušnou kartu.

Následující ukázka kódu používá sadu SDK služby Azure Blob Storage k nahrání souboru do služby Azure Blob Storage. Nahrání aktivuje datové připojení Event Gridu, které ingestuje data do Azure Data Exploreru.

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();

Poznámka:

Azure Data Explorer neodstraní objekty blob po příjmu dat. Zachovejte objekty blob po dobu tří až pěti dnů pomocí životního cyklu úložiště objektů blob v Azure ke správě odstranění objektů blob.

Poznámka:

Aktivace příjmu CopyBlob dat po operaci není podporovaná pro účty úložiště s povolenou funkcí hierarchického oboru názvů.

Důležité

Důrazně nedoporučujeme generovat události úložiště z vlastního kódu a odesílat je do služby Event Hubs. Pokud se tak rozhodnete, ujistěte se, že události vytvořené výhradně odpovídají příslušným specifikacím schématu událostí úložiště a formátu JSON.

Odebrání datového připojení Event Gridu

Pokud chcete odebrat připojení Event Gridu, spusťte následující příkaz:

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