Aracılığıyla paylaş


Temel sorguları çalıştırmak için uygulama oluşturma

Şunlar için geçerlidir: ✅Microsoft FabricAzure Veri Gezgini

Bu makalede şunların nasıl yapılacağını öğreneceksiniz:

Önkoşullar

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

Temel bir sorgu çalıştırma ve sonuçları işleme

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

  1. yardım kümesine bağlanan bir istemci uygulaması oluşturun.

    using Kusto.Data;
    using Kusto.Data.Net.Client;
    
    namespace BasicQuery {
      class BasicQuery {
        static void Main(string[] args) {
          var clusterUri = "https://help.kusto.windows.net/";
          var kcsb = new KustoConnectionStringBuilder(clusterUri)
              .WithAadUserPromptAuthentication();
    
          using (var kustoClient = KustoClientFactory.CreateCslQueryProvider(kcsb)) {
          }
        }
      }
    }
    
  2. Çalıştırılacak veritabanını ve sorguyu tanımlayın. Sorgu, toplam hasarın 100 milyon doları aştığı tarih, durum ve kasırgayla ilgili toplam hasarı döndürür.

    var database = "Samples";
    var query = @"StormEvents
                  | where EventType == 'Tornado'
                  | extend TotalDamage = DamageProperty + DamageCrops
                  | summarize DailyDamage=sum(TotalDamage) by State, bin(StartTime, 1d)
                  | where DailyDamage > 100000000
                  | order by DailyDamage desc";
    
  3. Sorguyu çalıştırın ve sonucu yazdırın.

    using (var response = kustoClient.ExecuteQuery(database, query, null)) {
      int columnNoStartTime = response.GetOrdinal("StartTime");
      int columnNoState = response.GetOrdinal("State");
      int columnNoDailyDamage = response.GetOrdinal("DailyDamage");
      Console.WriteLine("Daily tornado damages over 100,000,000$:");
    
      while (response.Read()) {
        Console.WriteLine("{0} - {1}, {2}",
          response.GetDateTime(columnNoStartTime),
          response.GetString(columnNoState),
          response.GetInt64(columnNoDailyDamage));
      }
    }
    

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

using Kusto.Data;
using Kusto.Data.Net.Client;

namespace BasicQuery {
  class BasicQuery {
    static void Main(string[] args) {
      string clusterUri = "https://help.kusto.windows.net/";
      var kcsb = new KustoConnectionStringBuilder(clusterUri)
          .WithAadUserPromptAuthentication();

      using (var kustoClient = KustoClientFactory.CreateCslQueryProvider(kcsb)) {
        string database = "Samples";
        string query = @"StormEvents
                         | where EventType == 'Tornado'
                         | extend TotalDamage = DamageProperty + DamageCrops
                         | summarize DailyDamage=sum(TotalDamage) by State, bin(StartTime, 1d)
                         | where DailyDamage > 100000000
                         | order by DailyDamage desc";

        using (var response = kustoClient.ExecuteQuery(database, query, null)) {
          int columnNoStartTime = response.GetOrdinal("StartTime");
          int columnNoState = response.GetOrdinal("State");
          int columnNoDailyDamage = response.GetOrdinal("DailyDamage");

          Console.WriteLine("Daily tornado damages over 100,000,000$:");

          while (response.Read()) {
            Console.WriteLine("{0} - {1}, {2}",
              response.GetDateTime(columnNoStartTime),
              response.GetString(columnNoState),
              response.GetInt64(columnNoDailyDamage));
          }
        }
      }
    }
  }
}

Uygulamanızı çalıştırma

Bir komut kabuğunda, uygulamanızı çalıştırmak için aşağıdaki komutu kullanın:

# Change directory to the folder that contains the basic queries project
dotnet run .

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

Daily damages tornado with damages over 100,000,000$:
2007-02-02 00:00:00+00:00 - FLORIDA , 270004000 $
2007-03-01 00:00:00+00:00 - ALABAMA , 266853000 $
2007-05-04 00:00:00+00:00 - KANSAS , 251625000 $
2007-03-01 00:00:00+00:00 - GEORGIA , 143688000 $

Sütun değerlerine erişmek için sıralı konumları kullanma

Sorgu sonucundaki sütunların sırası bilindiğinde, sütunların değerlerine sonuç kümesindeki sıralı konumlarına göre erişmek, sütun adlarına göre daha verimli olur. İsteğe bağlı olarak, çalışma zamanında bir kitaplık yöntemini kullanarak sütun adından bir sütun sırasını belirleyebilirsiniz.

Not

project veya project-away işleçlerini kullanarak sorgu sonucundaki sütunların varlığını ve sırasını denetleyebilirsiniz.

Örneğin, önceki kodu, sonuç kümesindeki sıralı konumlarına göre StartTime, Stateve DailyDamage sütunlarının değerlerine erişecek şekilde değiştirebilirsiniz:

C# dilinde sütunların değerlerine yalnızca sonuç kümesindeki sıralı konumlarına göre erişebilirsiniz. Sütun adlarını kullanamazsınız; bu nedenle kod aynı kalır.

int columnNoStartTime = response.GetOrdinal("StartTime");
int columnNoState = response.GetOrdinal("State");
int columnNoDailyDamage = response.GetOrdinal("DailyDamage");
Console.WriteLine("Daily tornado damages over 100,000,000$:");

while (response.Read()) {
  Console.WriteLine("{0} - {1}, {2}",
    response.GetDateTime(columnNoStartTime),
    response.GetString(columnNoState),
    response.GetInt64(columnNoDailyDamage));
}

İstemci isteği özellikleriyle sorgu davranışını özelleştirme

İstemci isteği özelliklerini ayarlayarak sorgunun davranışını özelleştirebilirsiniz. Kullanılabilir seçenekler hakkında daha fazla bilgi için bkz. istemci isteği özelliklerini.

Örneğin, özel bir istek kimliği geçirmek ve sorgu zaman aşımını 1 dakikaya ayarlamak için önceki koddaki kusto_client.execute_query çağrısını değiştirebilirsiniz. İstemci isteği özelliklerini kullanmak için ClientRequestProperties sınıfını içeri aktarmanız gerekir.

using Kusto.Data.Common;

var crp = new ClientRequestProperties();
// Set a custom client request identifier
crp.ClientRequestId = "QueryDemo" + Guid.NewGuid().ToString();
// Set the query timeout to 1 minute
crp.SetOption(ClientRequestProperties.OptionServerTimeout, "1m");

using (var response = kustoClient.ExecuteQuery(database, query, crp)) {
}

Kullanıcı girişini korumak için sorgu parametrelerini kullanma

Sorgu parametreleri, verilerinizin güvenliğini ve korumasını korumak için önemlidir. Verilerinize yetkisiz erişim elde etmeye veya verileri bozmaya çalışabilecek olası kötü amaçlı aktörlerden korur. Parametreli sorgular hakkında daha fazla bilgi için bkz. Sorgu parametreleri bildirim ifadesi.

Örneğin, önceki kodu değiştirerek EventType değerini ve DailyDamage minimum değerini sorguya parametre olarak geçirebilirsiniz. Parametreleri kullanmak için:

  1. Sorgu metnindeki parametreleri bildirme
  2. Sorgu metnindeki özellik değerlerini parametre adlarıyla değiştirme
  3. yürütme yöntemine geçirilen istemci isteği özelliklerindeki parametre değerlerini ayarlayın
string query = @"declare query_parameters(event_type:string, daily_damage:int);
                  StormEvents
                  | where EventType == event_type
                  | extend TotalDamage = DamageProperty + DamageCrops
                  | summarize DailyDamage=sum(TotalDamage) by State, bin(StartTime, 1d)
                  | where DailyDamage > daily_damage
                  | order by DailyDamage desc";

var crp = new ClientRequestProperties();
crp.SetParameter("event_type", "Flash Flood");
crp.SetParameter("daily_damage", 200000000.ToString());

using (var response = kustoClient.ExecuteQuery(database, query, crp)) {
  int columnNoStartTime = response.GetOrdinal("StartTime");
  int columnNoState = response.GetOrdinal("State");
  int columnNoDailyDamage = response.GetOrdinal("DailyDamage");
  Console.WriteLine("Daily flash flood damages over 200,000,000$:");

  while (response.Read()) {
    Console.WriteLine("{0} - {1}, {2}",
      response.GetDateTime(columnNoStartTime),
      response.GetString(columnNoState),
      response.GetInt64(columnNoDailyDamage));
  }
}

Sütun değerlerine ve parametrelerine erişmek için sıralı konumları kullanan kodun tamamı şu şekilde görünmelidir:

using Kusto.Data;
using Kusto.Data.Common;
using Kusto.Data.Net.Client;

namespace BasicQuery {
  class BasicQuery {
    static void Main(string[] args) {
      string clusterUri = "https://help.kusto.windows.net/";
      var kcsb = new KustoConnectionStringBuilder(clusterUri)
          .WithAadUserPromptAuthentication();

      using (var kustoClient = KustoClientFactory.CreateCslQueryProvider(kcsb)) {
        string database = "Samples";
        string query = @"declare query_parameters(event_type:string, daily_damage:int);
                         StormEvents
                         | where EventType == event_type
                         | extend TotalDamage = DamageProperty + DamageCrops
                         | summarize DailyDamage=sum(TotalDamage) by State, bin(StartTime, 1d)
                         | where DailyDamage > daily_damage
                         | order by DailyDamage desc";

        var crp = new ClientRequestProperties();
        crp.ClientRequestId = "QueryDemo" + Guid.NewGuid().ToString();
        crp.SetOption(ClientRequestProperties.OptionServerTimeout, "1m");
        crp.SetParameter("event_type", "Flash Flood");
        crp.SetParameter("daily_damage", 200000000.ToString());

        using (var response = kustoClient.ExecuteQuery(database, query, crp)) {
          int columnNoStartTime = response.GetOrdinal("StartTime");
          int columnNoState = response.GetOrdinal("State");
          int columnNoDailyDamage = response.GetOrdinal("DailyDamage");

          Console.WriteLine("Daily flash flood damages over 200,000,000$:");

          while (response.Read()) {
            Console.WriteLine("{0} - {1}, {2}",
              response.GetDateTime(columnNoStartTime),
              response.GetString(columnNoState),
              response.GetInt64(columnNoDailyDamage));
          }
        }
      }
    }
  }
}

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

Daily flash flood damages over 200,000,000$:
2007-08-21 00:00:00+00:00 - OHIO , 253320000 $

Sonraki adım