Bagikan melalui


Operator string

Berlaku untuk: ✅Microsoft Fabric

Bahasa Kueri Kusto (KQL) menawarkan berbagai operator kueri untuk mencari jenis data string. Artikel berikut menjelaskan cara istilah string diindeks, mencantumkan operator kueri string, dan memberikan tips untuk mengoptimalkan performa.

Memahami istilah string

Kusto mengindeks semua kolom, termasuk kolom jenis string. Beberapa indeks dibuat untuk kolom tersebut, tergantung pada data aktual. Indeks ini tidak langsung diekspos, tetapi digunakan dalam kueri dengan operator string yang memiliki has sebagai bagian dari nama mereka, seperti has, !has, hasprefix, !hasprefix. Semantik operator ini ditentukan oleh cara kolom dikodekan. Alih-alih melakukan pertandingan substring "polos", operator ini cocok dengan persyaratan.

Apa itu istilah?

Secara default, setiap string nilai dipecah menjadi urutan maksimal karakter alfanumerik, dan masing-masing urutan tersebut dibuat menjadi istilah.

Misalnya, dalam string berikut, istilahnya adalah Kusto, KustoExplorerQueryRun, dan substring berikut: ad67d136, c1db, 4f9f, 88ef, d94f3b6b0b5a.

Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun

Kusto membuat indeks istilah yang terdiri dari semua istilah yang berupa tiga karakter atau lebih, dan indeks ini digunakan oleh operator string seperti has, !has, dan sebagainya. Jika kueri mencari istilah yang lebih kecil dari tiga karakter, atau menggunakan operator contains, kueri akan kembali memindai nilai di kolom. Pemindaian jauh lebih lambat daripada mencari istilah dalam indeks istilah.

Sementara Explorer adalah substring KustoExplorerQueryRun, "KustoExplorerQueryRun" has "Explorer" akan mengembalikan false sementara "KustoExplorerQueryRun" contains "Explorer" akan mengembalikan true. Ini halang tetapi perilakunya disebabkan oleh fakta bahwa has berbasis istilah.

Operator pada string

Singkatan berikut digunakan dalam artikel ini:

  • RHS = sisi kanan ekspresi
  • LHS = sisi kiri ekspresi

Operator dengan akhiran _cs peka huruf besar/kecil.

Operator Deskripsi Peka Huruf Besar/Kecil Contoh (menangguhkan true)
== Sama dengan Ya "aBc" == "aBc"
!= Tidak sama Ya "abc" != "ABC"
=~ Sama dengan No "abc" =~ "ABC"
!~ Tidak sama No "aBc" !~ "xyz"
contains RHS muncul sebagai subsequence LHS No "FabriKam" contains "BRik"
!contains RHS tidak muncul dalam LHS No "Fabrikam" !contains "xyz"
contains_cs RHS muncul sebagai subsequence LHS Ya "FabriKam" contains_cs "Kam"
!contains_cs RHS tidak muncul dalam LHS Ya "Fabrikam" !contains_cs "Kam"
endswith RHS adalah subsequence penutup LHS No "Fabrikam" endswith "Kam"
!endswith RHS bukan subsequence penutup LHS No "Fabrikam" !endswith "brik"
endswith_cs RHS adalah subsequence penutup LHS Ya "Fabrikam" endswith_cs "kam"
!endswith_cs RHS bukan subsequence penutup LHS Ya "Fabrikam" !endswith_cs "brik"
has Sisi kanan (RHS) adalah istilah keseluruhan di sisi kiri (LHS) No "North America" has "america"
!has RHS bukan istilah lengkap di LHS No "North America" !has "amer"
has_all Sama seperti has tetapi bekerja pada semua elemen No "North and South America" has_all("south", "north")
has_any Sama seperti has tetapi bekerja pada salah satu elemen No "North America" has_any("south", "north")
has_cs RHS adalah istilah lengkap di LHS Ya "North America" has_cs "America"
!has_cs RHS bukan istilah lengkap di LHS Ya "North America" !has_cs "amer"
hasprefix RHS adalah prefiks istilah di LHS No "North America" hasprefix "ame"
!hasprefix RHS bukan prefiks istilah di LHS No "North America" !hasprefix "mer"
hasprefix_cs RHS adalah prefiks istilah di LHS Ya "North America" hasprefix_cs "Ame"
!hasprefix_cs RHS bukan prefiks istilah di LHS Ya "North America" !hasprefix_cs "CA"
hassuffix RHS adalah akhiran istilah di LHS No "North America" hassuffix "ica"
!hassuffix RHS bukan akhiran istilah di LHS No "North America" !hassuffix "americ"
hassuffix_cs RHS adalah akhiran istilah di LHS Ya "North America" hassuffix_cs "ica"
!hassuffix_cs RHS bukan akhiran istilah di LHS Ya "North America" !hassuffix_cs "icA"
in Sama dengan salah satu elemen Ya "abc" in ("123", "345", "abc")
!in Tidak sama dengan satu pun elemen Ya "bca" !in ("123", "345", "abc")
in~ Sama dengan salah satu elemen No "Abc" in~ ("123", "345", "abc")
!in~ Tidak sama dengan satu pun elemen No "bCa" !in~ ("123", "345", "ABC")
matches regex LHS berisi kecocokan untuk RHS Ya "Fabrikam" matches regex "b.*k"
startswith RHS adalah subsequence awal LHS No "Fabrikam" startswith "fab"
!startswith RHS bukan subsequence awal LHS No "Fabrikam" !startswith "kam"
startswith_cs RHS adalah subsequence awal LHS Ya "Fabrikam" startswith_cs "Fab"
!startswith_cs RHS bukan subsequence awal LHS Ya "Fabrikam" !startswith_cs "fab"

Tips performa

Untuk performa yang lebih baik, ketika ada dua operator yang melakukan tugas yang sama, gunakan yang peka huruf besar/kecil. Contohnya:

  • Gunakan ==, bukan =~
  • Gunakan in, bukan in~
  • Gunakan hassuffix_cs, bukan hassuffix

Untuk hasil yang lebih cepat, jika Anda menguji keberadaan simbol atau kata alfanumerik yang terikat oleh karakter non-alfanumerik, atau awal atau akhir bidang, gunakan has atau in. has bekerja lebih cepat dari contains, startswith, atau endswith.

Untuk mencari alamat IPv4 atau awalannya, gunakan salah satu operator khusus pada alamat IPv4, yang dioptimalkan untuk tujuan ini.

Untuk informasi selengkapnya, lihat Praktik terbaik kueri.

Misalnya, kueri pertama ini akan berjalan lebih cepat:

StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count

Operator pada alamat IPv4

Grup operator berikut menyediakan percepatan pencarian indeks pada alamat IPv4 atau awalannya.

Operator Deskripsi Contoh (menangguhkan true)
has_ipv4 LHS berisi alamat IPv4 yang diwakili oleh RHS has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3")
has_ipv4_prefix LHS berisi alamat IPv4 yang cocok dengan awalan yang diwakili oleh RHS has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.")
has_any_ipv4 LHS berisi salah satu alamat IPv4 yang disediakan oleh RHS has_any_ipv4("Source address is 10.1.2.3:1234", dynamic(["10.1.2.3", "127.0.0.1"]))
has_any_ipv4_prefix LHS berisi alamat IPv4 yang cocok dengan salah satu awalan yang disediakan oleh RHS has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."]))