Share via


Skapa en app för att köra hanteringskommandon

I den här artikeln kan du se hur du:

Förutsättningar

Konfigurera utvecklingsmiljön så att kusto-klientbiblioteket används.

Kör ett hanteringskommando och bearbeta resultatet

I önskad IDE eller textredigerare skapar du ett projekt eller en fil med namnet hanteringskommandon med den konvention som är lämplig för önskat språk. Lägg sedan till följande kod:

  1. Skapa en klientapp som ansluter ditt kluster. <your_cluster_uri> Ersätt platshållaren med klusternamnet.

    Anteckning

    För hanteringskommandon använder CreateCslAdminProvider du metoden client factory.

    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. Definiera en funktion som skriver ut kommandot som körs och dess resulterande tabeller. Den här funktionen packar upp kolumnnamnen i resultattabellerna och skriver ut varje namn/värde-par på en ny rad.

    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. Definiera kommandot som ska köras. Kommandot skapar en tabell med namnet MyStormEvents och definierar tabellschemat som en lista med kolumnnamn och typer. <your_database> Ersätt platshållaren med databasnamnet.

    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. Kör kommandot och skriv ut resultatet med hjälp av den tidigare definierade funktionen.

    Anteckning

    Du använder ExecuteControlCommand -metoden för att köra kommandot .

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

Den fullständiga koden bör se ut så här:

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

Kör appen

Använd följande kommando i ett kommandogränssnitt för att köra appen:

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

Du bör se ett resultat som liknar följande:

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

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

Ändra batchbearbetningsprincipen för inmatning på tabellnivå

Du kan anpassa inmatningens batchbearbetningsbeteende för tabeller genom att ändra motsvarande tabellprincip. Mer information finns i IngestionBatching-princip.

Anteckning

Om du inte anger alla parametrar för ett PolicyObject anges de ospecificerade parametrarna till standardvärden. Om du till exempel bara anger "MaximumBatchingTimeSpan" kommer "MaximumNumberOfItems" och "MaximumRawDataSizeMB" att anges till standard.

Du kan till exempel ändra appen för att ändra tidsgränsvärdet för inmatningsbatchbearbetningsprincipen till 30 sekunder genom att ingestionBatching ändra principen för MyStormEvents tabellen med hjälp av följande kommando:

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

När du lägger till koden i din app och kör den bör du se ett resultat som liknar följande:

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

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

Visa kvarhållningsprincipen på databasnivå

Du kan använda hanteringskommandon för att visa en databas kvarhållningsprincip.

Du kan till exempel ändra appen så att den visar databasens kvarhållningsprincip med hjälp av följande kod. Resultatet kureras för att projicera bort två kolumner från resultatet:

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

När du lägger till koden i din app och kör den bör du se ett resultat som liknar följande:

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

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

Nästa steg