Freigeben über


Erstellen einer App zum Ausführen von Verwaltungsbefehlen

Gilt für: ✅Microsoft FabricAzure Data Explorer

In diesem Artikel erfahren Sie, wie Sie:

Voraussetzungen

Richten Sie Ihre Entwicklungsumgebung für die Verwendung der Kusto-Clientbibliothek ein.

Ausführen eines Verwaltungsbefehls und Verarbeiten der Ergebnisse

Erstellen Sie in Ihrer bevorzugten IDE oder Ihrem Texteditor ein Projekt oder eine Datei mit dem Namen Verwaltungsbefehle, die der für Ihre bevorzugte Sprache geeigneten Konvention entsprechen. Fügen Sie dann den folgenden Code hinzu:

  1. Erstellen Sie eine Client-App, die Ihren Cluster verbindet. Ersetzen Sie den Platzhalter <your_cluster_uri> durch Ihren Clusternamen.

    Anmerkung

    Für Verwaltungsbefehle verwenden Sie die Client-Factorymethode CreateCslAdminProvider.

    using Kusto.Data;
    using Kusto.Data.Net.Client;
    
    namespace ManagementCommands {
      class ManagementCommands {
        static void Main(string[] args) {
          var clusterUri = "<your_cluster_uri>";
          var kcsb = new KustoConnectionStringBuilder(clusterUri)
              .WithAadUserPromptAuthentication();
    
          using (var kustoClient = KustoClientFactory.CreateCslAdminProvider(kcsb)) {
          }
        }
      }
    }
    
  2. Definieren Sie eine Funktion, die den auszuführenden Befehl und die resultierenden Tabellen druckt. Diese Funktion entpackt die Spaltennamen in den Ergebnistabellen und gibt jedes Name-Wert-Paar in einer neuen Zeile aus.

    static void PrintResultsAsValueList(string command, IDataReader response) {
      while (response.Read()) {
        Console.WriteLine("\n{0}\n", new String('-', 20));
        Console.WriteLine("Command: {0}", command);
        Console.WriteLine("Result:");
        for (int i = 0; i < response.FieldCount; i++) {
          Console.WriteLine("\t{0} - {1}", response.GetName(i), response.IsDBNull(i) ? "None" : response.GetString(i));
        }
      }
    }
    
  3. Definieren Sie den auszuführenden Befehl. Der Befehl erstellt eine Tabelle namens MyStormEvents und definiert das Tabellenschema als Liste von Spaltennamen und -typen. Ersetzen Sie den <your_database> Platzhalter durch Ihren Datenbanknamen.

    string database = "<your_database>";
    string table = "MyStormEvents";
    
    // Create a table named MyStormEvents
    // The brackets contain a list of column Name:Type pairs that defines the table schema
    string command = @$".create table {table}
                      (StartTime:datetime,
                       EndTime:datetime,
                       State:string,
                       DamageProperty:int,
                       DamageCrops:int,
                       Source:string,
                       StormSummary:dynamic)";
    
  4. Führen Sie den Befehl aus, und drucken Sie das Ergebnis mithilfe der zuvor definierten Funktion.

    Anmerkung

    Sie verwenden die ExecuteControlCommand-Methode, um den Befehl auszuführen.

    using (var response = kustoClient.ExecuteControlCommand(database, command, null)) {
      PrintResultsAsValueList(command, response);
    }
    

Der vollständige Code sollte wie folgt aussehen:

using Kusto.Data;
using Kusto.Data.Net.Client;

namespace ManagementCommands {
  class ManagementCommands {
    static void Main(string[] args) {
      string clusterUri = "https://<your_cluster_uri>";
      var kcsb = new KustoConnectionStringBuilder(clusterUri)
          .WithAadUserPromptAuthentication();

      using (var kustoClient = KustoClientFactory.CreateCslAdminProvider(kcsb)) {
        string database = "<your_database>";
        string table = "MyStormEvents";

        // Create a table named MyStormEvents
        // The brackets contain a list of column Name:Type pairs that defines the table schema
        string command = @$".create table {table} 
                          (StartTime:datetime,
                           EndTime:datetime,
                           State:string,
                           DamageProperty:int,
                           DamageCrops:int,
                           Source:string,
                           StormSummary:dynamic)";

        using (var response = kustoClient.ExecuteControlCommand(database, command, null)) {
          PrintResultsAsValueList(command, response);
        }
      }
    }

    static void PrintResultsAsValueList(string command, IDataReader response) {
      while (response.Read()) {
        Console.WriteLine("\n{0}\n", new String('-', 20));
        Console.WriteLine("Command: {0}", command);
        Console.WriteLine("Result:");
        for (int i = 0; i < response.FieldCount; i++) {
          Console.WriteLine("\t{0} - {1}", response.GetName(i), response.IsDBNull(i) ? "None" : response.GetString(i));
        }
      }
    }
  }
}

Starten Sie Ihre App

Verwenden Sie in einer Befehlsshell den folgenden Befehl, um Ihre App auszuführen:

# Change directory to the folder that contains the management commands project
dotnet run .

Sie sollten ein Ergebnis sehen, das dem folgenden ähnelt:

--------------------

Command: .create table MyStormEvents 
                 (StartTime:datetime,
                  EndTime:datetime,
                  State:string,
                  DamageProperty:int,
                  Source:string,
                  StormSummary:dynamic)
Result:
   TableName - MyStormEvents
   Schema - {"Name":"MyStormEvents","OrderedColumns":[{"Name":"StartTime","Type":"System.DateTime","CslType":"datetime"},{"Name":"EndTime","Type":"System.DateTime","CslType":"datetime"},{"Name":"State","Type":"System.String","CslType":"string"},{"Name":"DamageProperty","Type":"System.Int32","CslType":"int"},{"Name":"Source","Type":"System.String","CslType":"string"},{"Name":"StormSummary","Type":"System.Object","CslType":"dynamic"}]}
   DatabaseName - MyDatabaseName
   Folder - None
   DocString - None

Ändern der Richtline zur Batchverarbeitung der Datenerfassung auf Tabellenebene

Sie können das Batch-Erfassungsverhalten für Tabellen anpassen, indem Sie die entsprechende Tabellenrichtlinie ändern. Weitere Informationen finden Sie unter IngestionBatching-Richtlinie.

Anmerkung

Wenn Sie nicht alle Parameter eines PolicyObject-angeben, werden die nicht angegebenen Parameter auf Standardwertefestgelegt. Wenn Sie beispielsweise nur „MaximumBatchingTimeSpan“ angeben, werden „MaximumNumberOfItems“ und „MaximumRawDataSizeMB“ auf die Standardeinstellungen festgelegt.

Sie können die App beispielsweise so anpassen, dass der Timeoutwert der Richtlinie zur Batchverarbeitung der Datenerfassung in 30 Sekunden geändert wird. Dafür ändern Sie die Richtlinie ingestionBatching für die Tabelle MyStormEvents mithilfe des folgenden Befehls:

// Reduce the default batching timeout to 30 seconds
command = @$".alter-merge table {table} policy ingestionbatching '{{ ""MaximumBatchingTimeSpan"":""00:00:30"" }}'";

using (var response = kustoClient.ExecuteControlCommand(database, command, null))
{
  PrintResultsAsValueList(command, response);
}

Wenn Sie der App den Code hinzufügen und ausführen, sollte ein Ergebnis wie folgt angezeigt werden:

--------------------

Command: .alter-merge table MyStormEvents policy ingestionbatching '{ "MaximumBatchingTimeSpan":"00:00:30" }'
Result:
   PolicyName - IngestionBatchingPolicy
   EntityName - [YourDatabase].[MyStormEvents]
   Policy - {
  "MaximumBatchingTimeSpan": "00:00:30",
  "MaximumNumberOfItems": 500,
  "MaximumRawDataSizeMB": 1024
}
   ChildEntities - None
   EntityType - Table

Aufbewahrungsrichtlinie auf Ebene der Datenbank anzeigen

Sie können Verwaltungsbefehle verwenden, um die Aufbewahrungsrichtlinie einer Datenbankanzuzeigen.

Sie können die App beispielsweise so anpassen, dass die Aufbewahrungsrichtlinie Ihrer Datenbank mithilfe des folgenden Codes angezeigt wird. Das Ergebnis wird so kuratiert, dass zwei Spalten aus dem Resultat ausgeblendet werden:

// Show the database retention policy (drop some columns from the result)
command = @$".show database {database} policy retention | project-away ChildEntities, EntityType";

using (var response = kustoClient.ExecuteControlCommand(database, command, null)) {
  PrintResultsAsValueList(command, response);
}

Wenn Sie der App den Code hinzufügen und ausführen, sollte ein Ergebnis wie folgt angezeigt werden:

--------------------

Command: .show database YourDatabase policy retention | project-away ChildEntities, EntityType
Result:
   PolicyName - RetentionPolicy
   EntityName - [YourDatabase]
   Policy - {
  "SoftDeletePeriod": "365.00:00:00",
  "Recoverability": "Enabled"
}

Nächster Schritt