Névvel ellátott kifejezéseket használó lekérdezések optimalizálása

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:

Amikor egy lekérdezésben hivatkozik ezekre az elnevezett kifejezésekre, a következő lépések történnek:

  1. 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.
  2. 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.materialized tipp értékét a következőre true: .

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