管理コマンドの概要

この記事では、Kusto の管理に使用される管理コマンド (制御コマンドとも呼ばれます) について説明します。 管理コマンドは、必ずしもデータベース テーブル内のデータではない情報を取得したり、サービスの状態を変更したりする要求です。

管理コマンドとクエリの区別

Kusto では、言語レベル、プロトコル レベル、API レベルの 3 つのメカニズムを使用してクエリと管理コマンドを区別します。 これはセキュリティ上の目的で行われます。

言語レベルでは、要求のテキストの最初の文字によって、要求が管理コマンドかクエリかが決まります。 管理コマンドはドット (.) 文字で始まる必要があり、その文字で始まるクエリはありません。

プロトコル レベルでは、クエリとは対照的に、さまざまな HTTP/HTTPS エンドポイントが制御コマンドに使用されます。

API レベルでは、クエリではなく、管理コマンドを送信するためにさまざまな関数が使用されます。

クエリと管理コマンドの組み合わせ

管理コマンドは、クエリ (ただし、その逆は参照できません) またはその他の管理コマンドを参照できます。 サポートされているいくつかのシナリオがあります。

  • AdminThenQuery: 管理コマンドが実行され、その結果 (一時データ テーブルとして表されます) がクエリへの入力として機能します。
  • AdminFromQuery: クエリまたは .show 管理者コマンドが実行され、その結果 (一時データ テーブルとして表されます) が管理コマンドへの入力として機能します。

いずれの場合も、組み合わせ全体は技術的にはクエリではなく管理コマンドであるため、要求のテキストはドット (.) 文字で始まり、要求をサービスの管理エンドポイントに送信する必要があることに注意してください。

また、クエリ ステートメントがテキストのクエリ部分に含まれていることにも注意してください (コマンド自体の前には記述できません)。

Note

AdminThenQuery 操作の使用を制限することをお勧めします。

AdminThenQuery は、次の 2 つの方法のいずれかで示されます。

  • したがって、パイプ (|) 文字を使用すると、クエリは管理コマンドの結果を、他のデータ生成クエリ演算子と同様に扱います。
  • セミコロン (;) 文字を使用すると、管理コマンドの結果が と呼ばれる $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 は、<| 文字の組み合わせによって示されます。 たとえば、次の例では、まず 1 つの列 (str という名前で string 型) と 1 つの行を含むテーブルを生成するクエリを実行し、それを次のコンテキストでデータベースにテーブル名 MyTable として書き込みます。

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