Optimiser les requêtes utilisant des expressions nommées
Cet article explique comment optimiser l’utilisation répétée d’expressions nommées dans une requête.
En Langage de requête Kusto, vous pouvez lier des noms à des expressions complexes de plusieurs façons :
- Dans une instruction let
- Dans l’opérateur as
- Dans la liste des paramètres formels des fonctions définies par l’utilisateur
Lorsque vous référencez ces expressions nommées dans une requête, les étapes suivantes se produisent :
- Le calcul dans l’expression nommée est évalué. Ce calcul produit une valeur scalaire ou tabulaire.
- L’expression nommée est remplacée par la valeur calculée.
Si le même nom lié est utilisé plusieurs fois, le calcul sous-jacent est répété plusieurs fois. Quand cela devient-il problématique ?
- Lorsque les calculs consomment de nombreuses ressources et sont utilisés plusieurs fois.
- Lorsque le calcul n’est pas déterministe, mais que la requête suppose que tous les appels retournent la même valeur.
Limitation des risques
Pour atténuer ces problèmes, vous pouvez matérialiser les résultats de calcul en mémoire pendant la requête. Selon la façon dont le calcul nommé est défini, vous allez utiliser différentes stratégies de matérialisation :
Fonctions tabulaires
Utilisez les stratégies suivantes pour des fonctions tabulaires :
- let, instructions et paramètres de fonction : utilisez la fonction materialize().
- en tant qu’opérateur : définissez la valeur de l’indicateur
hint.materialized
surtrue
.
Par exemple, la requête suivante utilise l’exemple d’opérateur tabulaire non déterministe :
Notes
Les tables n’étant pas triées en général, toute référence de table dans une requête est, par définition, non déterministe.
Comportement sans utilisation de la fonction materialize
range x from 1 to 100 step 1
| sample 1
| as T
| union T
Sortie
x |
---|
63 |
92 |
Comportement sans la fonction materialize
range x from 1 to 100 step 1
| sample 1
| as hint.materialized=true T
| union T
Sortie
x |
---|
95 |
95 |
Fonctions scalaires
Des fonctions scalaires non déterministes peuvent être forcées à calculer exactement une fois à l’aide de toscalar().
Par exemple, la requête suivante utilise la fonction non déterministe rand() :
let x = () {rand(1000)};
let y = () {toscalar(rand(1000))};
print x, x, y, y
Sortie
print_0 | print_1 | print_2 | print_3 |
---|---|---|---|
166 | 137 | 70 | 70 |
Contenu connexe
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