Share via


Yönetim komutlarını çalıştırmak için uygulama oluşturma

Bu makalede şunları öğreneceksiniz:

Önkoşullar

Kusto istemci kitaplığını kullanmak için geliştirme ortamınızı ayarlayın.

Bir yönetim komutu çalıştırma ve sonuçları işleme

Tercih ettiğiniz IDE veya metin düzenleyicisinde, tercih ettiğiniz dile uygun kuralı kullanarak yönetim komutları adlı bir proje veya dosya oluşturun. Ardından aşağıdaki kodu ekleyin:

  1. Kümenizi bağlayan bir istemci uygulaması oluşturun. Yer tutucuyu <your_cluster_uri> kümenizin adıyla değiştirin.

    Not

    Yönetim komutları için istemci fabrikası yöntemini kullanacaksınız 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. Çalıştırılmakta olan komutu ve sonuç tablolarını yazdıran bir işlev tanımlayın. Bu işlev sonuç tablolarındaki sütun adlarını açar ve her ad-değer çiftini yeni bir satıra yazdırır.

    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. Çalıştırılacak komutu tanımlayın. komutu MyStormEvents adlı bir tablo oluşturur ve tablo şemasını sütun adları ve türleri listesi olarak tanımlar. Yer tutucuyu <your_database> veritabanınızın adıyla değiştirin.

    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. komutunu çalıştırın ve daha önce tanımlanmış işlevi kullanarak sonucu yazdırın.

    Not

    komutunu çalıştırmak için yöntemini kullanacaksınız ExecuteControlCommand .

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

Kodun tamamı şöyle görünmelidir:

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

Uygulamanızı çalıştırma

Komut kabuğunda aşağıdaki komutu kullanarak uygulamanızı çalıştırın:

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

Aşağıdakine benzer bir sonuç görmeniz gerekir:

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

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

Tablo düzeyi alma toplu işlem ilkesini değiştirme

İlgili tablo ilkesini değiştirerek tablolar için alım toplu işlem davranışını özelleştirebilirsiniz. Daha fazla bilgi için bkz. IngestionBatching ilkesi.

Not

PolicyObject'in tüm parametrelerini belirtmezseniz, belirtilmemiş parametreler varsayılan değerlere ayarlanır. Örneğin, yalnızca "MaximumBatchingTimeSpan" belirtilmesi "MaximumNumberOfItems" ve "MaximumRawDataSizeMB" değerlerinin varsayılan olarak ayarlanmasına neden olur.

Örneğin, aşağıdaki komutu kullanarak tablonun ilkesini değiştirerekingestionBatching alma toplu ilkesi zaman aşımı değerini 30 saniye olarak değiştirmek için MyStormEvents uygulamayı değiştirebilirsiniz:

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

Kodu uygulamanıza ekleyip çalıştırdığınızda aşağıdakine benzer bir sonuç görmeniz gerekir:

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

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

Veritabanı düzeyinde bekletme ilkesini gösterme

Veritabanının bekletme ilkesini görüntülemek için yönetim komutlarını kullanabilirsiniz.

Örneğin, aşağıdaki kodu kullanarak uygulamayı veritabanınızın bekletme ilkesini görüntüleyecek şekilde değiştirebilirsiniz. Sonuç, sonuçtan iki sütunu yansıtmak için seçilmiştir:

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

Kodu uygulamanıza ekleyip çalıştırdığınızda aşağıdakine benzer bir sonuç görmeniz gerekir:

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

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

Sonraki adım