Tworzenie aplikacji do uruchamiania poleceń zarządzania

W tym artykule omówiono sposób wykonywania następujących zadań:

Wymagania wstępne

Skonfiguruj środowisko deweloperskie do korzystania z biblioteki klienta Kusto.

Uruchamianie polecenia zarządzania i przetwarzanie wyników

W preferowanym środowisku IDE lub edytorze tekstów utwórz projekt lub plik o nazwie polecenia zarządzania przy użyciu konwencji odpowiedniej dla preferowanego języka. Następnie dodaj następujący kod:

  1. Utwórz aplikację kliencką, która łączy klaster. Zastąp <your_cluster_uri> symbol zastępczy nazwą klastra.

    Uwaga

    W przypadku poleceń zarządzania użyjesz CreateCslAdminProvider metody fabryki klienta.

    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. Zdefiniuj funkcję, która wyświetla uruchamiane polecenie i jego wynikowe tabele. Ta funkcja rozpakuje nazwy kolumn w tabelach wyników i drukuje każdą parę name-value w nowym wierszu.

    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. Zdefiniuj polecenie do uruchomienia. Polecenie tworzy tabelę o nazwie MyStormEvents i definiuje schemat tabeli jako listę nazw kolumn i typów. Zastąp <your_database> symbol zastępczy nazwą bazy danych.

    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. Uruchom polecenie i wydrukuj wynik przy użyciu wcześniej zdefiniowanej funkcji.

    Uwaga

    Użyjesz ExecuteControlCommand metody , aby uruchomić polecenie.

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

Pełny kod powinien wyglądać następująco:

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

Uruchamianie aplikacji

W powłoce poleceń użyj następującego polecenia, aby uruchomić aplikację:

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

Powinien zostać wyświetlony wynik podobny do następującego:

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

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

Zmienianie zasad przetwarzania wsadowego na poziomie tabeli

Zachowanie pozyskiwania wsadowego dla tabel można dostosować, zmieniając odpowiednie zasady tabeli. Aby uzyskać więcej informacji, zobacz Zasady ingestionBatching.

Uwaga

Jeśli nie określisz wszystkich parametrów obiektu PolicyObject, nieokreślone parametry zostaną ustawione na wartości domyślne. Na przykład określenie tylko wartości "MaximumBatchingTimeSpan" spowoduje ustawienie domyślne "MaximumNumberOfItems" i "MaximumRawDataSizeMB".

Możesz na przykład zmodyfikować aplikację, aby zmienić wartość limitu czasu zasad pozyskiwania wsadowego na 30 sekund, zmieniając ingestionBatching zasady dla MyStormEvents tabeli przy użyciu następującego polecenia:

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

Po dodaniu kodu do aplikacji i uruchomieniu go powinien zostać wyświetlony wynik podobny do następującego:

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

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

Pokaż zasady przechowywania na poziomie bazy danych

Za pomocą poleceń zarządzania można wyświetlić zasady przechowywania bazy danych.

Możesz na przykład zmodyfikować aplikację, aby wyświetlić zasady przechowywania bazy danych przy użyciu następującego kodu. Wynik jest wyselekcjonowany w celu odejścia dwóch kolumn od wyniku:

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

Po dodaniu kodu do aplikacji i uruchomieniu go powinien zostać wyświetlony wynik podobny do następującego:

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

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

Następny krok