Ottimizzare le query che usano espressioni denominate
Questo articolo illustra come ottimizzare l'uso di espressioni denominate in una query.
In Linguaggio di query Kusto è possibile associare nomi a espressioni complesse in diversi modi:
- In un'istruzione let
- Nell'operatore come
- Nell'elenco dei parametri formali delle funzioni definite dall'utente
Quando si fa riferimento a queste espressioni denominate in una query, si verificano i passaggi seguenti:
- Il calcolo all'interno dell'espressione denominata viene valutato. Questo calcolo produce un valore scalare o tabulare.
- L'espressione denominata viene sostituita con il valore calcolato.
Se lo stesso nome associato viene usato più volte, il calcolo sottostante verrà ripetuto più volte. Quando si tratta di una preoccupazione?
- Quando i calcoli usano molte risorse e vengono usati molte volte.
- Quando il calcolo non è deterministico, ma la query presuppone che tutte le chiamate restituiscano lo stesso valore.
Strategia di riduzione del rischio
Per attenuare questi problemi, è possibile materializzare i risultati del calcolo in memoria durante la query. A seconda del modo in cui viene definito il calcolo denominato, si useranno strategie di materializzazione diverse:
Funzioni tabulari
Usare le strategie seguenti per le funzioni tabulari:
- istruzioni let e parametri di funzione: usare la funzione materialize().
- come operatore: impostare il
hint.materialized
valore hint sutrue
.
Ad esempio, la query seguente usa l'operatore di esempio tabulare non deterministico:
Nota
Le tabelle non vengono ordinate in generale, quindi qualsiasi riferimento di tabella in una query è, per definizione, non deterministico.
Comportamento senza usare la funzione di materializzazione
range x from 1 to 100 step 1
| sample 1
| as T
| union T
Output
x |
---|
63 |
92 |
Comportamento usando la funzione di materializzazione
range x from 1 to 100 step 1
| sample 1
| as hint.materialized=true T
| union T
Output
x |
---|
95 |
95 |
Funzioni scalari
Le funzioni scalari non deterministiche possono essere costrette a calcolare esattamente una volta usando toscalar().
Ad esempio, la query seguente usa la funzione non deterministica, rand():
let x = () {rand(1000)};
let y = () {toscalar(rand(1000))};
print x, x, y, y
Output
print_0 | print_1 | print_2 | print_3 |
---|---|---|---|
166 | 137 | 70 | 70 |
Contenuti correlati
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per