Невозможно иметь команды в пользовательских функциях в 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()
чтобы запрашивать только самые последние "версии" записей (вы также можете создать функцию, которая инкапсулирует эту логику и переопределяет таблицу, присвоив ей имя с именем таблицы).