Невозможно иметь команды в пользовательских функциях в Kusto

Я пытаюсь создать функцию, которая будет принимать имя тега и значение datetime и помещать экстент в конкретную таблицу с этим тегом, а затем вводить новую запись в эту таблицу с тем же тегом и входным значением datetime - sort "обновления" моделирования. Я не беспокоюсь о производительности, я просто буду хранить метаданные - может быть, максимум 20-30 строк.

Вот как выглядит таблица создания:

.create table MyTable(sometext:string,somevalue:datetime)

И ниже показан мой шаг создания функции, который не выполняется:

.create-or-alter function MyFunction(arg_sometext:string,arg_somedate:datetime) 
{
.drop extents <| .show table MyTable extents where tags has arg_sometext;
.ingest inline into table MyTable with (tags="[arg_sometext]") <| arg_somedate
} 

Итак, вы можете видеть, что я пытаюсь сделать что-то простое - я подозреваю, что Кусто не разрешит команды в функции. Есть ли способ обойти это?

1 ответ

Как правило: Kusto требует, чтобы управляющие команды начинались с точки (.), и это должен быть первый символ в тексте команды. Поскольку запросы, функции и т. Д. Не начинаются с точки, это не позволяет им вызывать управляющие команды.

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

В частности: в отношении вашего конкретного сценария:

  • Я предполагаю, что он запускается автоматически (даже если у вас была возможность создать функцию), что предполагает, что вы должны быть в состоянии достичь своей цели, используя API-интерфейсы / клиентские библиотеки Kusto и простой скрипт / приложение.
  • Альтернативным и, возможно, даже лучшим подходом будет пересмотр, если вам действительно нужно удалить или обновить определенные записи, или вы можете использовать summarize arg_max() чтобы запрашивать только самые последние "версии" записей (вы также можете создать функцию, которая инкапсулирует эту логику и переопределяет таблицу, присвоив ей имя с именем таблицы).
Другие вопросы по тегам