Elnevezett kifejezéseket használó lekérdezések optimalizálása
Ez a cikk azt ismerteti, hogyan optimalizálhatja a névvel ellátott kifejezések ismételt használatát egy lekérdezésben.
A Kusto lekérdezésnyelv többféleképpen is köthet neveket összetett kifejezésekhez:
- Let utasításban
- A mint operátorban
- A felhasználó által definiált függvények formális paramétereinek listájában
Amikor egy lekérdezésben hivatkozik ezekre a névvel ellátott kifejezésekre, a következő lépések történnek:
- A névvel ellátott kifejezésen belüli számítás kiértékelése történik. Ez a számítás skaláris vagy táblázatos értéket eredményez.
- A névvel ellátott kifejezés helyébe a számított érték lép.
Ha ugyanazt a kötött nevet többször használja a rendszer, akkor a mögöttes számítás többször is ismétlődik. Mikor van ez aggodalomra ad okot?
- Ha a számítások sok erőforrást használnak fel, és sokszor használják.
- Ha a számítás nem determinisztikus, de a lekérdezés feltételezi, hogy az összes meghívás ugyanazt az értéket adja vissza.
Kockázatcsökkentés
Ezeknek a problémáknak a mérséklése érdekében a lekérdezés során a számítási eredményeket a memóriában is felhasználhatja. A névvel ellátott számítás definiálásának módjától függően különböző materializálási stratégiákat fog használni:
Táblázatos függvények
Táblázatos függvényekhez használja az alábbi stratégiákat:
- let utasítások és függvényparaméterek: Használja a materialize() függvényt.
- operátorként: Állítsa a tipp értékét a
hint.materialized
értékretrue
.
A következő lekérdezés például a nem determinisztikus táblázatos mintaoperátort használja:
Megjegyzés
A táblák nincsenek általában rendezve, így a lekérdezések bármely táblahivatkozása definíció szerint nem determinisztikus.
Viselkedés a materializálási függvény használata nélkül
range x from 1 to 100 step 1
| sample 1
| as T
| union T
Kimenet
x |
---|
63 |
92 |
Viselkedés a materializál függvény használatával
range x from 1 to 100 step 1
| sample 1
| as hint.materialized=true T
| union T
Kimenet
x |
---|
95 |
95 |
Skaláris függvények
A nem determinisztikus skaláris függvényeket a toscalar() használatával pontosan egyszer kell kiszámítani.
A következő lekérdezés például a rand() nem determinisztikus függvényt használja:
let x = () {rand(1000)};
let y = () {toscalar(rand(1000))};
print x, x, y, y
Kimenet
print_0 | print_1 | print_2 | print_3 |
---|---|---|---|
166 | 137 | 70 | 70 |
Kapcsolódó tartalom
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: