Сведения об управлении (управляющих командах)

В этом разделе описываются управляющие команды, которые используются при работе с Kusto. Управляющие команды представляют собой запросы к службе для получения сведений, которые не являются данными в таблицах базы данных, или для изменения состояния службы и т. п.

Отличия управляющих команд от запросов

Kusto использует три механизма для различения запросов и управляющих команд: на уровне языка, на уровне протокола и на уровне API. Это нужно для обеспечения безопасности.

На уровне языка первый символ в тексте запроса определяет, является ли он обычным запросом или управляющей командой. Управляющие команды должны начинаться с символа точки (.), а запрос не может начинаться с этого символа.

На уровне протокола используются разные конечные точки HTTP/HTTPS для управляющих команд и для запросов.

На уровне API используются разные функции для управляющих команд и для запросов.

Сочетание запросов и управляющих команд

Управляющие команды могут ссылаться на запросы (но не наоборот) и на другие управляющие команды. Поддерживаются несколько сценариев работы.

  1. AdminThenQuery. Сначала выполняется управляющая команда, а затем ее результат (в виде временной таблицы данных) используется как входные данные для запроса.
  2. AdminFromQuery. Сначала выполняется запрос или управляющая команда .show, а затем ее результат (в виде временной таблицы данных) используется как входные данные для управляющей команды.

Обратите внимание, что во всех этих случаях вся операция технически считается управляющей командой, а не запросом, а значит текст запроса должен начинаться с символа точки (.) и направляться в конечную точку управления соответствующей службы.

Также обратите внимание, что инструкции запроса отображаются в той части текста, которая относится к запросу (те есть не могут располагаться перед командой).

Примечание

Не выполняйте операции [command-then-query] слишком часто. command-then-query выводит результирующий набор команды управления и применяет к этому набору фильтры и агрегаты.

  • Например: .show ... | where ... | summarize ...
  • При выполнении команды типа .show cluster extents | count (ударение на | count) сначала Kusto подготавливает таблицу данных, в которой содержатся все сведения всех экстентов в кластере. Затем система отправляет эту сохраняемую только в памяти таблицу в обработчик Kusto для подсчета. Система выполняет масштабную работу без оптимизации, чтобы предоставить такой элементарный ответ.

Метод AdminThenQuery обозначается одним из двух способов:

  1. При применении символа вертикальной черты (|) запрос обрабатывает результаты управляющей команды так же, как и данные от любого другого оператора запроса.
  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 обозначается сочетанием символов <|. В следующем примере мы сначала выполним запрос, который создаст таблицу с одним столбцом (с именем str и типом string) и одной строкой, а затем сохраним ее с именем таблицы MyTable в базе данных в текущем контексте:

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