Delen via


Een app maken om beheeropdrachten uit te voeren

Van toepassing op: ✅Microsoft FabricAzure Data Explorer-

In dit artikel leert u het volgende:

Voorwaarden

Uw ontwikkelomgeving instellen om de Kusto-clientbibliotheek te gebruiken.

Een beheeropdracht uitvoeren en de resultaten verwerken

Maak in uw favoriete IDE of teksteditor een project of bestand met de naam beheeropdrachten met behulp van de conventie die geschikt is voor uw voorkeurstaal. Voeg vervolgens de volgende code toe:

  1. Maak een client-app die uw cluster verbindt. Vervang de tijdelijke aanduiding <your_cluster_uri> door de clusternaam.

    Notitie

    Voor beheeropdrachten gebruikt u de 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. Definieer een functie waarmee de opdracht wordt uitgevoerd en de resulterende tabellen worden afgedrukt. Met deze functie worden de kolomnamen in de resultaattabellen uitgepakt en wordt elk naam-waardepaar op een aparte regel afgedrukt.

    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. Definieer de opdracht die moet worden uitgevoerd. Met de opdracht maakt u een tabel genaamd MyStormEvents en definieert u het tabelschema als een lijst met kolomnamen en -typen. Vervang de tijdelijke aanduiding <your_database> door de naam van uw database.

    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. Voer de opdracht uit en druk het resultaat af met behulp van de eerder gedefinieerde functie.

    Notitie

    U gebruikt de ExecuteControlCommand methode om de opdracht uit te voeren.

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

De volledige code moet er als volgt uitzien:

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

Uw app uitvoeren

Gebruik in een opdrachtshell de volgende opdracht om uw app uit te voeren:

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

U zou een resultaat moeten zien dat er ongeveer als volgt uitziet:

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

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

Wijzig het batchbeleid voor gegevensinvoer op tabelniveau

U kunt het batchgedrag voor opnamebatches voor tabellen aanpassen door het bijbehorende tabelbeleid te wijzigen. Zie IngestionBatching-beleidvoor meer informatie.

Notitie

Als u niet alle parameters van een PolicyObjectopgeeft, worden de niet-opgegeven parameters ingesteld op standaardwaarden. Als u bijvoorbeeld alleen 'MaximumBatchingTimeSpan' opgeeft, wordt 'MaximumNumberOfItems' en 'MaximumRawDataSizeMB' standaard ingesteld.

U kunt de app bijvoorbeeld wijzigen om het batchverwerkingsbeleid voor opname time-outwaarde te wijzigen in 30 seconden door het ingestionBatching-beleid voor de MyStormEvents-tabel te wijzigen met behulp van de volgende opdracht:

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

Wanneer u de code aan uw app toevoegt en uitvoert, ziet u een resultaat dat er ongeveer als volgt uitziet:

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

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

Bewaarbeleid op databaseniveau weergeven

U kunt beheeropdrachten gebruiken om het bewaarbeleid van een database weer te geven.

U kunt de app bijvoorbeeld wijzigen om het bewaarbeleid van uw database weer te geven met behulp van de volgende code. Het resultaat wordt gecureerd om twee kolommen van het resultaat weg te projecteren:

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

Wanneer u de code aan uw app toevoegt en uitvoert, ziet u een resultaat dat er ongeveer als volgt uitziet:

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

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

Volgende stap