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
, bukanin~
- Gunakan
hassuffix_cs
, bukanhassuffix
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."])) |