Opérateurs de chaîne
S’applique à : ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Langage de requête Kusto (KQL) offre différents opérateurs de requête pour la recherche de types de données de chaîne. L'article suivant explique comment les termes de type String sont indexés, répertorie les opérateurs de requête String, et donne des conseils pour optimiser les performances.
Présentation des termes de type String
Kusto indexe toutes les colonnes, y compris les colonnes de type string
. Des index multiples sont générés pour ces colonnes, en fonction des données réelles. Ces index ne sont pas directement exposés, mais ils sont utilisés dans les requêtes avec les opérateurs string
qui comportent has
dans leur nom, comme has
, !has
, hasprefix
, !hasprefix
. La sémantique de ces opérateurs est dictée par la manière dont la colonne est encodée. Au lieu d'établir une correspondance standard entre substrings, ces opérateurs font correspondre des termes.
Qu'est-ce qu'un terme ?
Par défaut, chaque string
valeur est divisée en séquences maximales de caractères alphanumériques, et chacune de ces séquences est transformée en terme.
Par exemple, dans la string
suivante, Kusto
, KustoExplorerQueryRun
sont des termes, tandis que ad67d136
, c1db
, 4f9f
, 88ef
, d94f3b6b0b5a
sont des substrings.
Kusto: ad67d136-c1db-4f9f-88ef-d94f3b6b0b5a;KustoExplorerQueryRun
Kusto génère un index composé de tous les termes d’au moins trois caractères, et cet index est utilisé par les opérateurs de chaîne has
, !has
et ainsi de suite. Si la requête recherche un terme de moins de trois caractères ou utilise un opérateur contains
, elle recommence à analyser les valeurs de la colonne. L’analyse est beaucoup plus lente que la recherche du terme dans l’index des termes.
Opérateurs utilisés sur les chaînes
Les abréviations suivantes sont utilisées dans cet article :
- CD = côté droit de l'expression
- CG = côté gauche de l'expression
Les opérateurs dotés du suffixe _cs
respectent la casse.
Opérateur | Description | Respecte la casse | Exemple (génère true ) |
---|---|---|---|
== |
Égal à | Oui | "aBc" == "aBc" |
!= |
Non égal à | Oui | "abc" != "ABC" |
=~ |
Égal à | Non | "abc" =~ "ABC" |
!~ |
Non égal à | Non | "aBc" !~ "xyz" |
contains |
Le terme de droite est une sous-séquence du terme de gauche | Non | "FabriKam" contains "BRik" |
!contains |
RHS ne se produit pas dans LHS | Non | "Fabrikam" !contains "xyz" |
contains_cs |
Le terme de droite est une sous-séquence du terme de gauche | Oui | "FabriKam" contains_cs "Kam" |
!contains_cs |
RHS ne se produit pas dans LHS | Oui | "Fabrikam" !contains_cs "Kam" |
endswith |
RHS est une sous-séquence fermante de LHS | Non | "Fabrikam" endswith "Kam" |
!endswith |
RHS n’est pas une sous-séquence fermante de LHS | Non | "Fabrikam" !endswith "brik" |
endswith_cs |
RHS est une sous-séquence fermante de LHS | Oui | "Fabrikam" endswith_cs "kam" |
!endswith_cs |
RHS n’est pas une sous-séquence fermante de LHS | Oui | "Fabrikam" !endswith_cs "brik" |
has |
Le terme de droite est un terme entier dans le terme de gauche | Non | "North America" has "america" |
!has |
Le terme de droite n'est pas un terme entier à gauche | Non | "North America" !has "amer" |
has_all |
Identique à has , mais fonctionne sur tous les éléments |
Non | "North and South America" has_all("south", "north") |
has_any |
Identique à has mais fonctionne sur tous les éléments |
Non | "North America" has_any("south", "north") |
has_cs |
Le terme de droite est un terme entier à gauche | Oui | "North America" has_cs "America" |
!has_cs |
Le terme de droite n'est pas un terme entier à gauche | Oui | "North America" !has_cs "amer" |
hasprefix |
Le terme de droite est un préfixe à gauche | Non | "North America" hasprefix "ame" |
!hasprefix |
Le terme de droite n'est pas un préfixe à gauche | Non | "North America" !hasprefix "mer" |
hasprefix_cs |
Le terme de droite est un préfixe à gauche | Oui | "North America" hasprefix_cs "Ame" |
!hasprefix_cs |
Le terme de droite n'est pas un préfixe à gauche | Oui | "North America" !hasprefix_cs "CA" |
hassuffix |
Le terme de droite est un suffixe à gauche | Non | "North America" hassuffix "ica" |
!hassuffix |
Le terme de droite n'est pas un suffixe à gauche | Non | "North America" !hassuffix "americ" |
hassuffix_cs |
Le terme de droite est un suffixe à gauche | Oui | "North America" hassuffix_cs "ica" |
!hassuffix_cs |
Le terme de droite n'est pas un suffixe à gauche | Oui | "North America" !hassuffix_cs "icA" |
in |
Est égal à l’un des éléments | Oui | "abc" in ("123", "345", "abc") |
!in |
N’est égal à aucun des éléments | Oui | "bca" !in ("123", "345", "abc") |
in~ |
Est égal à l’un des éléments | Non | "Abc" in~ ("123", "345", "abc") |
!in~ |
N’est égal à aucun des éléments | Non | "bCa" !in~ ("123", "345", "ABC") |
matches regex |
Le terme de gauche contient une correspondance du terme de droite | Oui | "Fabrikam" matches regex "b.*k" |
startswith |
RHS est une sous-séquence initiale de LHS | Non | "Fabrikam" startswith "fab" |
!startswith |
RHS n’est pas une sous-séquence initiale de LHS | Non | "Fabrikam" !startswith "kam" |
startswith_cs |
RHS est une sous-séquence initiale de LHS | Oui | "Fabrikam" startswith_cs "Fab" |
!startswith_cs |
RHS n’est pas une sous-séquence initiale de LHS | Oui | "Fabrikam" !startswith_cs "fab" |
Astuces pour les performances
Pour de meilleures performances, lorsque deux opérateurs effectuent la même tâche, utilisez celui qui respecte la casse. Par exemple :
- Utiliser
==
, pas=~
- Utiliser
in
, pasin~
- Utiliser
hassuffix_cs
, pashassuffix
Pour des résultats plus rapides, si vous recherchez la présence d'un symbole ou d'un mot alphanumérique délimité par des caractères non alphanumériques, ou le début ou la fin d'un champ, utilisez has
ou in
.
has
effectue la recherche plus rapidement que contains
, startswith
ou endswith
.
Pour rechercher des adresses IPv4 ou leurs préfixes, utilisez l’un des opérateurs spéciaux sur les adresses IPv4, qui sont optimisées à cet effet.
Pour plus d’informations, consultez Bonnes pratiques relatives aux requêtes.
Par exemple, la première de ces requêtes sera plus rapide :
StormEvents | where State has "North" | count;
StormEvents | where State contains "nor" | count
Opérateurs sur des adresses IPv4
Le groupe d’opérateurs suivant fournit une recherche accélérée par index sur les adresses IPv4 ou leurs préfixes.
Opérateur | Description | Exemple (génère true ) |
---|---|---|
has_ipv4 | LHS contient l’adresse IPv4 représentée par RHS | has_ipv4("Source address is 10.1.2.3:1234", "10.1.2.3") |
has_ipv4_prefix | LHS contient une adresse IPv4 qui correspond à un préfixe représenté par RHS | has_ipv4_prefix("Source address is 10.1.2.3:1234", "10.1.2.") |
has_any_ipv4 | LHS contient l’une des adresses IPv4 fournies par 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 contient une adresse IPv4 qui correspond à l’un des préfixes fournis par RHS | has_any_ipv4_prefix("Source address is 10.1.2.3:1234", dynamic(["10.1.2.", "127.0.0."])) |