Partager via


Créer une application pour exécuter des commandes de gestion

Dans cet article, vous apprendrez comment :

Prérequis

Configurez votre environnement de développement pour utiliser la bibliothèque de client Kusto.

Exécuter une commande de gestion et traiter les résultats

Dans votre IDE ou éditeur de texte préféré, créez un projet ou un fichier nommé commandes de gestion à l’aide de la convention appropriée pour votre langue préférée. Ensuite, ajoutez le code suivant :

  1. Créez une application cliente qui connecte votre cluster. Remplacez l’espace réservé par le <your_cluster_uri> nom de votre cluster.

    Notes

    Pour les commandes de gestion, vous allez utiliser la méthode de fabrique du CreateCslAdminProvider client.

    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. Définissez une fonction qui imprime la commande en cours d’exécution et ses tables résultantes. Cette fonction décompresse les noms de colonnes dans les tables de résultats et imprime chaque paire nom-valeur sur une nouvelle ligne.

    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. Définissez la commande à exécuter. La commande crée une table appelée MyStormEvents et définit le schéma de table sous la forme d’une liste de noms et de types de colonnes. Remplacez l’espace réservé par le <your_database> nom de votre base de données.

    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. Exécutez la commande et imprimez le résultat à l’aide de la fonction précédemment définie.

    Notes

    Vous allez utiliser la ExecuteControlCommand méthode pour exécuter la commande .

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

Le code complet doit ressembler à ceci :

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

Exécuter l’application

Dans un interpréteur de commandes, utilisez la commande suivante pour exécuter votre application :

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

Vous devriez voir un résultat similaire à ce qui suit :

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

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

Modifier la stratégie de traitement par lots d’ingestion au niveau de la table

Vous pouvez personnaliser le comportement de traitement par lot d’ingestion pour les tables en modifiant la stratégie de table correspondante. Pour plus d’informations, consultez la Stratégie IngestionBatching.

Notes

Si vous ne spécifiez pas tous les paramètres d’un PolicyObject, les paramètres non spécifiés sont définis sur les valeurs par défaut. Par exemple, si vous spécifiez uniquement « MaximumBatchingTimeSpan », « MaximumNumberOfItems » et « MaximumRawDataSizeMB » sont définis par défaut.

Par exemple, vous pouvez modifier l’application pour modifier la valeur du délai d’expiration de la stratégie de traitement par lot d’ingestion sur 30 secondes en modifiant la ingestionBatching stratégie pour la table à l’aide MyStormEvents de la commande suivante :

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

Lorsque vous ajoutez le code à votre application et que vous l’exécutez, vous devez voir un résultat similaire à ce qui suit :

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

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

Afficher la stratégie de rétention au niveau de la base de données

Vous pouvez utiliser des commandes de gestion pour afficher la stratégie de rétention d’une base de données.

Par exemple, vous pouvez modifier l’application pour afficher la stratégie de rétention de votre base de données à l’aide du code suivant. Le résultat est organisé pour projeter deux colonnes du résultat :

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

Lorsque vous ajoutez le code à votre application et que vous l’exécutez, vous devez voir un résultat similaire à ce qui suit :

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

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

Étape suivante