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