Dela via


Skapa en app för att köra hanteringskommandon

Gäller för: ✅Microsoft FabricAzure Data Explorer

I den här artikeln lär du dig att:

Förutsättningar

Konfigurera utvecklingsmiljön att använda Kusto-klientbiblioteket.

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 det språk du föredrar. Lägg sedan till följande kod:

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

    Not

    För hanteringskommandon kommer du att använda klientfabrikmetoden 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. 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. Ersätt platshållaren <your_database> 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.

    Not

    Du använder metoden ExecuteControlCommand 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 din app

I ett kommandogränssnitt använder du följande kommando 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 principen för batchbearbetning på tabellnivå

Du kan anpassa beteendet för inmatningsbatchbearbetning för tabeller genom att ändra motsvarande tabellprincip. Mer information finns i IngestionBatching policy.

Notera

Om du inte anger alla parametrar för en PolicyObjectanges 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 så att den ändrar inmatningsbatchprincip timeout-värde till 30 sekunder genom att ändra ingestionBatching princip 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 databass kvarhållningsprincip.

Du kan till exempel ändra appen så att den kan visa databasens lagringspolicy med hjälp av följande kod. Resultatet bearbetas för att ta 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