Compartilhar via


Criar um aplicativo para executar comandos de gerenciamento

Neste artigo, você aprenderá como:

Pré-requisitos

Configure seu ambiente de desenvolvimento para usar a biblioteca de clientes kusto.

Executar um comando de gerenciamento e processar os resultados

Em seu IDE ou editor de texto preferido, crie um projeto ou arquivo chamado comandos de gerenciamento usando a convenção apropriada para seu idioma preferido. Em seguida, adicione o seguinte código:

  1. Crie um aplicativo cliente que conecte o cluster. Substitua o <your_cluster_uri> espaço reservado pelo nome do cluster.

    Observação

    Para comandos de gerenciamento, você usará o método de fábrica do CreateCslAdminProvider cliente.

    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. Defina uma função que imprime o comando que está sendo executado e suas tabelas resultantes. Essa função descompacta os nomes de coluna nas tabelas de resultados e imprime cada par nome-valor em uma nova linha.

    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. Defina o comando a ser executado. O comando cria uma tabela chamada MyStormEvents e define o esquema da tabela como uma lista de nomes e tipos de coluna. Substitua o <your_database> espaço reservado pelo nome do banco de dados.

    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. Execute o comando e imprima o resultado usando a função definida anteriormente.

    Observação

    Você usará o ExecuteControlCommand método para executar o comando .

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

O código completo deve ter esta aparência:

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

Executar o aplicativo

Em um shell de comando, use o seguinte comando para executar seu aplicativo:

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

Você deverá ver um resultado semelhante ao seguinte:

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

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

Alterar a política de envio em lote de ingestão no nível da tabela

Você pode personalizar o comportamento de envio em lote de ingestão para tabelas alterando a política de tabela correspondente. Para obter mais informações, consulte Política ingestionBatching.

Observação

Se você não especificar todos os parâmetros de um PolicyObject, os parâmetros não especificados serão definidos como valores padrão. Por exemplo, especificar apenas "MaximumBatchingTimeSpan" resultará na definição de "MaximumNumberOfItems" e "MaximumRawDataSizeMB" como padrão.

Por exemplo, você pode modificar o aplicativo para alterar o valor de tempo limite da política de envio em lote de ingestão para 30 segundos alterando a ingestionBatching política da MyStormEvents tabela usando o seguinte comando:

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

Ao adicionar o código ao seu aplicativo e executá-lo, você deverá ver um resultado semelhante ao seguinte:

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

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

Mostrar a política de retenção no nível do banco de dados

Você pode usar comandos de gerenciamento para exibir a política de retenção de um banco de dados.

Por exemplo, você pode modificar o aplicativo para exibir a política de retenção do banco de dados usando o código a seguir. O resultado é coletado para projetar duas colunas do resultado:

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

Ao adicionar o código ao seu aplicativo e executá-lo, você deverá ver um resultado semelhante ao seguinte:

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

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

Próxima etapa