Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Szolgáltatások váltása a Verzió legördülő listával. További információ a navigációról.
A következőkre vonatkozik: ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
Ez a cikk bemutatja, hogyan optimalizálhatja a névvel ellátott kifejezések ismételt használatát egy lekérdezésben.
A Kusto lekérdezési nyelvben a neveket többféleképpen kötheti ö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 az elnevezett kifejezésekre, a következő lépések történnek:
- A rendszer kiértékeli a névvel ellátott kifejezésen belüli számítást. 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, akkor a mögöttes számítás többször is ismétlődik. Mikor van ez aggodalomra ad okot?
- Amikor 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.
Mitigation
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
hint.materializedtipp értékét a következőretrue: .
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, ezért a lekérdezésekben szereplő táblahivatkozások definíció szerint nem determinisztikusak.
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 |
A materialize függvényt használó viselkedés
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ények a toscalar() használatával pontosan egyszer számíthatók ki.
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 |