Přehled správy (řídicích příkazů)
Tato část popisuje řídicí příkazy sloužící ke správě Kusto. Řídicí příkazy jsou požadavky pro službu na načtení informací, které nejsou nutně data v databázových tabulkách, nebo úpravu stavu služby atd.
Odlišování řídicích příkazů od dotazů
Kusto k odlišování dotazů od řídicích příkazů používá tři mechanismy: na úrovni jazyka, na úrovni protokolu a na úrovni rozhraní API. To se provádí z bezpečnostních důvodů.
Na úrovni jazyka první znak textu požadavku určuje, jestli je požadavek řídicím příkazem, nebo dotazem. Řídicí příkazy musí začínat tečkou (.), ale dotazy tečkou začínat nesmí.
Na úrovni protokolu se pro řídicí příkazy používají jiné koncové body HTTP/HTTPS než pro dotazy.
Na úrovni rozhraní API se k odesílání řídicích příkazů používají jiné funkce než k odesílání dotazů.
Kombinování dotazů a řídicích příkazů
Řídicí příkazy můžou odkazovat na dotazy (ale ne naopak) nebo další řídicí příkazy. Podporuje se několik scénářů:
- AdminThenQuery: Spustí se řídicí příkaz a jeho výsledek (reprezentovaný dočasnou tabulkou dat) se použije jako vstup dotazu.
- AdminFromQuery: spustí se dotaz nebo příkaz Správce a jeho výsledek (reprezentovaný jako dočasná tabulka dat) slouží jako vstup do řídicího příkazu.
Všimněte si, že v každém případě je celá kombinace technicky vzato řídicím příkazem, a ne dotazem, takže text požadavku musí začínat tečkou (.) a požadavek se musí odeslat do koncového bodu pro správu služby.
Všimněte si také, že příkazy dotazů se nacházejí v části textu s dotazem (nemůžou být před samotným příkazem).
Poznámka
Nespouštějte operace typu [command-then-query] příliš často. command-then-query spojí sadu výsledků řídicích příkazů do jednoho kanálu a použije na ně filtry/agregace.
- Příklad:
.show ... | where ... | summarize ... - Když spustíte něco jako
.show cluster extents | count(s důrazem na| count), Kusto nejprve připraví tabulku dat, která obsahuje všechny podrobnosti všech rozsahů v clusteru. Systém pak potom odešle tuto tabulku jenom v paměti do modulu Kusto, aby zjistil počet. Znamená to, že systém pro zajištění takto triviální odpovědi ve skutečnosti usilovně pracuje (neoptimálním způsobem).
AdminThenQuery se označuje jedním ze dvou způsobů:
- Pomocí znaku svislé čáry (
|) – dotaz se pak k výsledkům řídicího příkazu chová stejně, jako by to byl jakýkoli jiný operátor dotazu generující data. - Pomocí středníku (
;) – výsledky řídicího příkazu se uloží do speciální proměnné$command_results, kterou pak můžete v dotazu použít, kolikrát chcete.
Příklad:
// 1. Using pipe: Count how many tables are in the database-in-scope:
.show tables
| count
// 2. Using semicolon: Count how many tables are in the database-in-scope:
.show tables;
$command_results
| count
// 3. Using semicolon, and including a let statement:
.show tables;
let useless=(n:string){strcat(n,'-','useless')};
$command_results | extend LastColumn=useless(TableName)
AdminFromQuery je označen kombinací znaků. Například v následujícím příkladu nejprve spustíme dotaz, který vytvoří tabulku s jedním sloupcem (sloupec str typu string) a jedním řádkem, a zapíšeme tabulku do databáze v kontextu jako tabulku s názvem MyTable:
.set MyTable <|
let text="Hello, World!";
print str=text