Types de requête KQL

Effectué

Vous avez découvert la structure d'une requête KQL dans l'unité précédente. À présent, voyons plus en détail les différentes parties et les différents types de requêtes KQL.

Cette unité donne une vue d’ensemble des instructions et fonctions de requête. Dans KQL, toutes les requêtes sont constituées d’une ou plusieurs instructions de requête. Ces instructions affectent uniquement la requête spécifique dans laquelle elles sont utilisées, sauf si elles sont stockées explicitement pour une utilisation ultérieure. Les types les plus courants d’instructions de requête sont les instructions d’expression tabulaire et les instructions let. En plus de sa bibliothèque complète de fonctions intégrées, KQL autorise les fonctions définies par l’utilisateur qui peuvent être stockées ou définies pour être utilisées dans une seule requête.

Instructions d’expression tabulaire

La plupart des requêtes utilisent au moins une instruction d’expression tabulaire, ce qui signifie que son entrée et sa sortie sont des tables ou des jeux de données tabulaires. Ces instructions contiennent généralement des opérateurs, chacun commençant par une entrée tabulaire et renvoyant une sortie tabulaire.

KQL propose un large éventail d'opérateurs, allant d'opérateurs simples (comme count, sort, et where) à des opérateurs plus complexes (comme parse, join, et render).

Par exemple, la requête suivante contient quatre instructions d’expression tabulaire :

StormEvents // tabular expression statement 1
| where EventType == "Flood" // tabular expression statement 2
| sort by DamageProperty asc // tabular expression statement 3
| take 10 // tabular expression statement 4

Instructions let

Une instruction let définit une liaison entre un nom et une expression. Vous pouvez utiliser des instructions let pour diviser une longue requête en petites parties nommées plus faciles à comprendre.

Par exemple, nous avons utilisé les instructions let de la requête suivante pour définir des valeurs scalaires :

let n = 10;  // number
let place = "VIRGINIA";  // string
let cutoff = ago(12345d); // datetime 
StormEvents 
| where StartTime > cutoff and State == place 
| take n

Fonctions intégrées

Les fonctions intégrées sont des fonctions codées en dur définies par KQL qui ne peuvent pas être modifiées. KQL a une bibliothèque enrichie de fonctions que vous pouvez utiliser, que vous trouverez dans la documentation officielle de KQL. Les fonctions s’étendent du simple tri et de la simple correspondance aux fonctions complexes statistiques et géospatiales.

Par exemple, la fonction suivante strcat() concatène des arguments de chaîne :

print str = strcat("hello", " ", "world")

Fonctions définies par l’utilisateur

Les fonctions définies par l’utilisateur sont, comme leur nom l’indique, définies par l’utilisateur. Nous pouvons diviser en deux types des fonctions définies par l’utilisateur :

  • Fonctions stockées : fonctions définies par l’utilisateur qui sont des entités de schéma de base de données stockées et managées, semblables aux tables. Différents produits utilisent différentes façons de stocker des fonctions.

    Par exemple, la requête suivante dans Azure Data Explorer stocke une fonction qui prend un paramètre :

    .create function
    with (docstring = 'Demo function with parameter', folder='Demo')
     MyFunction2(myLimit: long)  {StormEvents | take myLimit}
    

    Dans d’autres environnements, comme Azure Monitor et Microsoft Sentinel, vous pouvez enregistrer des requêtes via l’interface utilisateur.

  • Fonctions définies par une requête : ce sont des fonctions définies par l’utilisateur qui sont définies et utilisées dans l’étendue d’une seule requête. La définition de telles fonctions s’effectue par le biais d’une instruction let.

    Par exemple, la requête suivante définit la fonction f et l’utilise :

    let f=(a: string, b: string) {
        strcat(a, " (la la la) ", b)
    };
    print f("hello", "world")