Share via


Erstellen einer App zum Ausführen von Verwaltungsbefehlen

In diesem Artikel werden folgende Vorgehensweisen behandelt:

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 im Text-Editor ein Projekt oder eine Datei namens Verwaltungsbefehle mit der für Ihre bevorzugte Sprache geeigneten Konvention. Fügen Sie dann den folgenden Code hinzu:

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

    Hinweis

    Für Verwaltungsbefehle verwenden Sie die CreateCslAdminProvider Clientfactorymethode.

    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 zugehörigen Tabellen ausgibt. 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 mit dem Namen 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 geben Sie das Ergebnis mit der zuvor definierten Funktion aus.

    Hinweis

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

Ausführen der 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 .

Es sollte ein Ergebnis ähnlich dem folgenden angezeigt werden:

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

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 Batchverarbeitungsrichtlinie für die Erfassung auf Tabellenebene

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

Hinweis

Wenn Sie nicht alle Parameter eines PolicyObject angeben, werden die nicht angegebenen Parameter auf Standardwerte festgelegt. Wenn Sie beispielsweise nur "MaximumBatchingTimeSpan" angeben, werden "MaximumNumberOfItems" und "MaximumRawDataSizeMB" auf den Standardwert festgelegt.

Sie können z. B. die App ändern, um den Timeoutwert der Batchverarbeitungsrichtlinie für die Erfassung in 30 Sekunden zu ändern, indem Sie die ingestionBatching Richtlinie für die MyStormEvents Tabelle mit dem folgenden Befehl ändern:

// 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 ähnlich dem folgenden 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

Anzeigen der Aufbewahrungsrichtlinie auf Datenbankebene

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

Beispielsweise können Sie die App ändern, um die Aufbewahrungsrichtlinie Ihrer Datenbank anzuzeigen , indem Sie den folgenden Code verwenden. Das Ergebnis wird so zusammengestellt, dass zwei Spalten aus dem Ergebnis weg projiziert 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 ähnlich dem folgenden 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