Невозможно иметь команды в пользовательских функциях в Kusto - PullRequest
0 голосов
/ 28 марта 2019

Я пытаюсь создать функцию, которая будет принимать имя тега и значение даты и времени и помещать экстент в конкретную таблицу с этим тегом, а затем вводить новую запись в эту таблицу с тем же тегом и входным значением даты и времени - своего рода «обновление» симуляции. Я не беспокоюсь о производительности, я просто буду хранить метаданные - возможно, 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 Ответ

1 голос
/ 28 марта 2019

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

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

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

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