Optimalizace dotazů, které používají pojmenované výrazy
Tento článek popisuje, jak optimalizovat opakované použití pojmenovaných výrazů v dotazu.
V dotazovací jazyk Kusto můžete názvy se složitými výrazy svázat několika různými způsoby:
- V příkazu let
- V operátoru as
- Ve formálním seznamu parametrů uživatelem definovaných funkcí
Když v dotazu odkazujete na tyto pojmenované výrazy, proveďte následující kroky:
- Vyhodnocuje se výpočet v rámci pojmenovaného výrazu. Tento výpočet vytvoří skalární nebo tabulkovou hodnotu.
- Pojmenovaný výraz se nahradí počítanou hodnotou.
Pokud se stejný název vazby použije vícekrát, základní výpočet se bude opakovat vícekrát. Kdy je to problém?
- Když výpočty spotřebovávají mnoho prostředků a používají se mnohokrát.
- Pokud je výpočet ne deterministický, ale dotaz předpokládá, že všechna volání vrátí stejnou hodnotu.
Omezení rizik
Pokud chcete tyto obavy zmírnit, můžete během dotazu materializovat výsledky výpočtu v paměti. V závislosti na způsobu definování pojmenovaného výpočtu použijete různé strategie materializace:
Tabulkové funkce
Pro tabulkové funkce použijte následující strategie:
- příkazy let a parametry funkce: Použijte funkci materialize().
- as – operátor: Nastavte hodnotu nápovědy
hint.materialized
natrue
.
Například následující dotaz používá ne deterministický tabulkový ukázkový operátor:
Poznámka
Tabulky nejsou obecně seřazené, takže jakýkoli odkaz na tabulku v dotazu je z definice ne deterministický.
Chování bez použití funkce materializace
range x from 1 to 100 step 1
| sample 1
| as T
| union T
Výstup
x |
---|
63 |
92 |
Chování pomocí funkce materializace
range x from 1 to 100 step 1
| sample 1
| as hint.materialized=true T
| union T
Výstup
x |
---|
95 |
95 |
Skalární funkce
Neterministické skalární funkce je možné vynutit výpočet přesně jednou pomocí toscalar().
Například následující dotaz používá ne deterministickou funkci rand():
let x = () {rand(1000)};
let y = () {toscalar(rand(1000))};
print x, x, y, y
Výstup
print_0 | print_1 | print_2 | print_3 |
---|---|---|---|
166 | 137 | 70 | 70 |
Související obsah
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro