Share via


Creación de una aplicación para ejecutar comandos de administración

En este artículo aprenderá a:

Requisitos previos

Configure el entorno de desarrollo para usar la biblioteca cliente de Kusto.

Ejecución de un comando de administración y procesamiento de los resultados

En el IDE o editor de texto que prefiera, cree un proyecto o un archivo denominado comandos de administración mediante la convención adecuada para su idioma preferido. Después agregue el siguiente código:

  1. Cree una aplicación cliente que conecte el clúster. Reemplace el marcador de <your_cluster_uri> posición por el nombre del clúster.

    Nota

    En el caso de los comandos de administración, usará el método de fábrica de 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 una función que imprima el comando que se ejecuta y sus tablas resultantes. Esta función desempaqueta los nombres de columna en las tablas de resultados e imprime cada par nombre-valor en una nueva línea.

    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 el comando que se va a ejecutar. El comando crea una tabla denominada MyStormEvents y define el esquema de tabla como una lista de tipos y nombres de columna. Reemplace el marcador de posición por el <your_database> nombre de la base de datos.

    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. Ejecute el comando e imprima el resultado mediante la función definida previamente.

    Nota

    Usará el ExecuteControlCommand método para ejecutar el comando .

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

El código completo debe tener este aspecto:

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

Ejecutar la aplicación

En un shell de comandos, use el siguiente comando para ejecutar la aplicación:

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

Debería ver un resultado similar al siguiente:

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

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

Cambio de la directiva de procesamiento por lotes de ingesta de nivel de tabla

Puede personalizar el comportamiento de procesamiento por lotes de ingesta para las tablas cambiando la directiva de tabla correspondiente. Para obtener más información, vea la directiva IngestionBatching.

Nota

Si no especifica todos los parámetros de un PolicyObject, los parámetros no especificados se establecerán en valores predeterminados. Por ejemplo, al especificar solo "MaximumBatchingTimeSpan", se establecerá "MaximumNumberOfItems" y "MaximumRawDataSizeMB" en el valor predeterminado.

Por ejemplo, puede modificar la aplicación para cambiar el valor de tiempo de espera de la directiva de procesamiento por lotes de ingesta a 30 segundos modificando la ingestionBatching directiva de la MyStormEvents tabla mediante el siguiente 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);
}

Al agregar el código a la aplicación y ejecutarlo, debería ver un resultado similar al siguiente:

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

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 la directiva de retención de nivel de base de datos

Puede usar comandos de administración para mostrar la directiva de retención de una base de datos.

Por ejemplo, puede modificar la aplicación para mostrar la directiva de retención de la base de datos mediante el código siguiente. El resultado se mantiene para proyectar dos columnas del 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);
}

Al agregar el código a la aplicación y ejecutarlo, debería ver un resultado similar al siguiente:

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

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

Paso siguiente