Opérateurs de chaîne
Langage de requête Kusto (KQL) propose 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 un 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.
Notes
Dans EngineV2, un terme se compose de quatre caractères ou plus.
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 |
RHS apparaît comme une sous-séquence de LHS | Non | "FabriKam" contains "BRik" |
!contains |
RHS ne figure pas dans LHS | Non | "Fabrikam" !contains "xyz" |
contains_cs |
RHS apparaît comme une sous-séquence de LHS | Oui | "FabriKam" contains_cs "Kam" |
!contains_cs |
RHS ne figure 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 |
LHS contient une correspondance pour RHS | 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" |
Conseils sur les performances
Pour de meilleures performances, lorsque deux opérateurs effectuent la même tâche, utilisez celui qui respecte la casse. Par exemple :
- Utilisez
==
, pas=~
- Utilisez
in
, pasin~
- Utilisez
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és à 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 les 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."])) |
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour