Поиск следующей записи по имени пользователя и метке времени в материализованном представлении без сериализации данных в Kusto

#azure-data-explorer #kql #materialized-views

Вопрос:

У меня есть таблица в проводнике данных Azure с именем пользователя, меткой времени и статусом. Я должен рассчитать продолжительность каждого статуса одного и того же имени пользователя и сохранить результаты в материализованном виде.

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

Есть ли разумный способ обойти это ограничение в материализованных представлениях?

Пример запроса:

 let data=datatable (Username:string, Timestamp:datetime, Status:int)
[
  "Jimmy", datetime(2021-10-01 12:30:00), 1,
  "Joan", datetime(2021-10-01 12:34:56), 1,
  "Joan", datetime(2021-10-01 13:34:56), 2,
  "Jimmy", datetime(2021-10-01 14:34:56), 2,
  "Jimmy", datetime(2021-10-01 16:34:56), 1,
  "Joan", datetime(2021-10-01 18:34:34), 1,
  "Joan", datetime(2021-10-01 18:38:20), 2,
  "Joan", datetime(2021-10-01 18:45:16), 1,
];
data
| sort by Username, Timestamp asc
| extend NextUsername = next(Username)
| extend NextTimestamp = iif(Username == NextUsername, next(Timestamp), datetime(null))
| extend Duration = (NextTimestamp - Timestamp)
| project Username, Start = Timestamp, End = NextTimestamp, Status, Duration
 

Пример результата:

 Username    Start                       End                         Status  Duration
Joan        2021-10-01 12:34:56.0000000 2021-10-01 13:34:56.0000000 1       01:00:00
Joan        2021-10-01 13:34:56.0000000 2021-10-01 18:34:34.0000000 2       04:59:38
Joan        2021-10-01 18:34:34.0000000 2021-10-01 18:38:20.0000000 1       00:03:46
Joan        2021-10-01 18:38:20.0000000 2021-10-01 18:45:16.0000000 2       00:06:56
Joan        2021-10-01 18:45:16.0000000                             1   
Jimmy       2021-10-01 12:30:00.0000000 2021-10-01 14:34:56.0000000 1       02:04:56
Jimmy       2021-10-01 14:34:56.0000000 2021-10-01 16:34:56.0000000 2       02:00:00
Jimmy       2021-10-01 16:34:56.0000000                             1   
 

Ответ №1:

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