Membuat aplikasi untuk menjalankan kueri dasar

Beralih layanan menggunakan menu tarik-turun Versi. Pelajari selengkapnya tentang navigasi.
Berlaku untuk: ✅ Microsoft Fabric ✅ Azure Data Explorer

Dalam artikel ini, Anda akan mempelajari cara:

Prasyarat

Siapkan lingkungan pengembangan Anda untuk menggunakan pustaka klien Kusto.

Menjalankan kueri dasar dan memproses hasilnya

Di IDE atau editor teks Anda, buat proyek atau file bernama kueri dasar dengan menggunakan konvensi penamaan untuk bahasa Anda. Kemudian tambahkan kode berikut:

  1. Buat aplikasi klien yang tersambung ke kluster bantuan.

    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. Tentukan database dan kueri yang akan dijalankan. Kueri mengembalikan tanggal, status, dan total kerusakan terkait tornado di mana total kerusakan melebihi $100 juta.

    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. Jalankan kueri dan cetak hasilnya.

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

Kode lengkap akan terlihat seperti ini:

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

Jalankan aplikasi Anda

Di shell perintah, gunakan perintah berikut untuk menjalankan aplikasi Anda:

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

Anda akan melihat hasil yang mirip dengan yang berikut ini:

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 $

Menggunakan posisi ordinal untuk mengakses nilai kolom

Saat urutan kolom dalam hasil kueri diketahui, lebih efisien untuk mengakses nilai kolom berdasarkan posisi ordinalnya dalam tataan hasil daripada dengan nama kolomnya. Secara opsional, pada runtime Anda dapat menggunakan metode pustaka untuk menentukan ordinal kolom dari nama kolomnya.

Nota

Anda dapat mengontrol kehadiran dan urutan kolom dalam hasil kueri dengan menggunakan project operator atau project-away .

Misalnya, Anda dapat memodifikasi kode sebelumnya untuk mengakses nilai StartTimekolom , , Statedan DailyDamage berdasarkan posisi ordinalnya dalam tataan hasil:

Di C#, Anda hanya dapat mengakses nilai kolom berdasarkan posisi ordinalnya dalam tataan hasil. Anda tidak dapat menggunakan nama kolom, sehingga kode tetap sama.

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

Menyesuaikan perilaku kueri dengan properti permintaan klien

Anda bisa mengkustomisasi perilaku kueri dengan mengatur properti permintaan klien. Untuk informasi selengkapnya tentang opsi yang tersedia, lihat properti permintaan klien.

Misalnya, Anda dapat mengganti kusto_client.execute_query panggilan di kode sebelumnya untuk meneruskan ID permintaan kustom dan mengatur batas waktu kueri menjadi 1 menit. Untuk menggunakan properti permintaan klien, Anda harus mengimpor ClientRequestProperties kelas.

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

Menggunakan parameter kueri untuk melindungi input pengguna

Parameter kueri membantu melindungi data Anda. Mereka melindunginya dari aktor jahat yang mungkin mencoba mendapatkan akses tidak sah ke atau merusak data Anda. Untuk informasi selengkapnya tentang kueri berparameter, lihat Pernyataan deklarasi parameter kueri.

Misalnya, Anda dapat memodifikasi kode sebelumnya untuk meneruskan nilai EventType dan nilai minimum DailyDamage sebagai parameter ke kueri. Untuk menggunakan parameter:

  1. Deklarasikan parameter dalam teks kueri.
  2. Ganti nilai properti dalam teks kueri dengan nama parameter.
  3. Atur nilai parameter dalam properti permintaan klien yang diteruskan ke metode eksekusi.
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));
  }
}

Kode lengkap menggunakan posisi ordinal untuk mengakses nilai kolom dan parameter akan terlihat seperti ini:

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

Anda akan melihat hasil yang mirip dengan yang berikut ini:

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

Langkah selanjutnya