管理命令概觀

本文說明用來管理 Kusto 的管理命令,也稱為控制命令。 管理命令是要求服務擷取不一定是資料庫資料表中的資料,或是修改服務狀態等資訊。

區分管理命令與查詢

Kusto 使用三種機制來區分查詢和管理命令:在語言層級、通訊協定層級,以及 API 層級。 這是為了安全起見而這麼做。

在語言層級,要求文字的第一個字元會決定要求是否為管理命令或查詢。 管理命令的開頭必須是點 (.) 字元,而且沒有查詢可以從該字元開始。

在通訊協定層級,不同的 HTTP/HTTPS 端點用於控制命令,而不是查詢。

在 API 層級,會使用不同的函式來傳送管理命令,而不是查詢。

合併查詢和管理命令

管理命令可以參考查詢 (,但反之亦然,) 或其他管理命令。 有數個支援的案例:

  • AdminThenQuery:會執行管理命令,而其結果 (表示為暫存資料表,) 做為查詢的輸入。
  • AdminFromQuery:執行查詢或 .show 系統管理員命令,而其結果 (表示為暫存資料表,) 做為管理命令的輸入。

請注意,在所有情況下,整個組合都是管理命令,而不是查詢,因此要求文字必須以點 (.) 字元開始,而且要求必須傳送至服務的管理端點。

另請注意,查詢陳述式會出現在文字的查詢組件內 (不能在命令本身前面)。

注意

建議您限制 AdminThenQuery 作業的使用方式。

AdminThenQuery 會以下列兩種方式的其中一種來表示:

  • 藉由使用管道 () | 字元,查詢就會將管理命令的結果視為任何其他資料產生的查詢運算子。
  • 藉由使用分號 (;) 字元,然後將管理命令的結果導入名為 $command_results 的特殊符號中,然後,在查詢中可能會使用任何次數。

例如:

// 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 是以 <|字元組合表示。 例如,我們會在下面先執行一個查詢,它會產生具有單一資料行 (名為 str 且為 string 類型) 和單一資料列的資料表,並將它撰寫為資料庫內容中的資料表名稱 MyTable

.set MyTable <|
let text="Hello, World!";
print str=text