Варианты использования материализованных представлений
Применимо: ✅Microsoft Fabric✅Azure Data Explorer
материализованные представления предоставляют агрегирование запроса по исходной таблице или другому материализованному представлению. В этой статье рассматриваются распространенные и расширенные варианты использования для материализованных представлений.
Распространенные варианты использования
Ниже приведены распространенные сценарии, которые можно устранить с помощью материализованного представления:
Обновление данных: Обновить данные путем возврата последней записи для каждой сущности с помощью
arg_max()
(функции агрегирования). Например, создайте представление, которое материализует только записи, полученные с этого момента:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
уменьшить разрешение данных уменьшить разрешение данных путем вычисления периодической статистики по необработанным данным. Используйте различные функции агрегирования по периоду времени. Например, сохраняйте моментальный снимок up-toдаты отдельных пользователей в день:
.create materialized-view UsersByDay on table T { T | summarize dcount(User) by bin(Timestamp, 1d) }
записи дедупликации: дедупликации записей в таблице с помощью
take_any()
(функция агрегирования). Например, создайте материализованное представление, которое дедупликирует исходную таблицу на основе столбцаEventId
с помощью обратного просмотра 6 часов. Записи дедупликируются только в течение 6 часов до текущих записей..create materialized-view with(lookback=6h) DeduplicatedTable on table T { T | summarize take_any(*) by EventId }
Заметка
Вы можете скрыть исходную таблицу, создав функцию с тем же именем, что и таблица, которая ссылается на материализованное представление. Этот шаблон гарантирует, что вызывающие запросы к таблице получают доступ к дедупликированному материализованному представлению, так как функции переопределяют таблицы с тем же именем. Чтобы избежать циклических ссылок в определении представления, используйте функцию table() для ссылки на исходную таблицу:
.create materialized-view DeduplicatedTable on table T { table('T') | summarize take_any(*) by EventId }
Дополнительные примеры см. в .create materialized-view command.
Расширенный сценарий
Вы можете использовать материализованное представление для обработки событий создания и обновления и удаления. Для записей с неполными или устаревшими сведениями в каждом столбце материализованное представление может предоставлять последние обновления для каждого столбца, за исключением удаленных сущностей.
Рассмотрим следующую входную таблицу с именем Events
:
входных
Метка времени | жвачка | ИДЕНТИФИКАТОР | col1 | col2 | col3 |
---|---|---|---|---|---|
2023-10-24 00:00:00.0000000 | C | 1 | 1 | 2 | |
2023-10-24 01:00:00.0000000 | U | 1 | 22 | 33 | |
2023-10-24 02:00:00.0000000 | U | 1 | 23 | ||
2023-10-24 00:00:00.0000000 | C | 2 | 1 | 2 | |
2023-10-24 00:10:00.0000000 | U | 2 | 4 | ||
2023-10-24 02:00:00.0000000 | D | 2 |
Создайте материализованное представление, чтобы получить последнее обновление для каждого столбца, используя функцию агрегирования arg_max():
.create materialized-view ItemHistory on table Events
{
Events
| extend Timestamp_col1 = iff(isnull(col1), datetime(1970-01-01), Timestamp),
Timestamp_col2 = iff(isnull(col2), datetime(1970-01-01), Timestamp),
Timestamp_col3 = iff(isnull(col3), datetime(1970-01-01), Timestamp)
| summarize arg_max(Timestamp_col1, col1), arg_max(Timestamp_col2, col2), arg_max(Timestamp_col3, col3), arg_max(Timestamp, cud) by id
}
выходных
ИДЕНТИФИКАТОР | Timestamp_col1 | col1 | Timestamp_col2 | col2 | Timestamp_col3 | col3 | Метка времени | жвачка |
---|---|---|---|---|---|---|---|---|
2 | 2023-10-24 00:00:00.0000000 | 1 | 2023-10-24 00:10:00.0000000 | 4 | 1970-01-01 00:00:00.0000000 | 2023-10-24 02:00:00.0000000 | D | |
1 | 2023-10-24 00:00:00.0000000 | 1 | 2023-10-24 02:00:00.0000000 | 23 | 2023-10-24 01:00:00.0000000 | 33 | 2023-10-24 02:00:00.0000000 | U |
Вы можете создать хранимую функцию для дальнейшего очистки результатов:
ItemHistory
| project Timestamp, cud, id, col1, col2, col3
| where cud != "D"
| project-away cud
окончательные выходные
Последнее обновление для каждого столбца для идентификатора 1
, так как идентификатор 2
был удален.
Метка времени | ИДЕНТИФИКАТОР | col1 | col2 | col3 |
---|---|---|---|---|
2023-10-24 02:00:00.0000000 | 1 | 1 | 23 | 33 |
Материализованные представления и политики обновления
Материализованные представления и политики обновления работают по-разному и служат различным вариантам использования. Используйте следующие рекомендации, чтобы определить, какой из них следует использовать:
Материализованные представления подходят для агрегирования, а политики обновления не являются. Политики обновления выполняются отдельно для каждого пакета приема и поэтому могут выполнять агрегаты только в одном пакете приема. Если требуется запрос агрегирования, всегда используйте материализованные представления.
Политики обновления полезны для преобразований данных, обогащения с таблицами измерений (обычно с помощью оператора подстановки ) и других манипуляций с данными, которые могут выполняться в области единого приема.
Политики обновления выполняются во время приема. Данные недоступны для запросов в исходной таблице или целевой таблице до запуска всех политик обновления. Материализованные представления, с другой стороны, не являются частью конвейера приема. Процесс материализации периодически выполняется в фоновом режиме после приема. Записи в исходной таблице доступны для запросов до их материализации.
Политики обновления и материализованные представления могут включать соединения, но их эффективность ограничена конкретными сценариями. В частности, соединения подходят только в том случае, если данные, необходимые для соединения с обеих сторон, доступны во время процесса обновления или материализации. Если соответствующие сущности получаются при запуске политики обновления или материализации, возникает риск пропуска данных. Дополнительные сведения о
dimension tables
см. в материализованных параметрах запроса и таблицах фактов и измерений.
Заметка
Если вам нужно материализовать соединения, которые не подходят для политик обновления и материализованных представлений, вы можете самостоятельно управлять этим процессом. Чтобы создать и сохранить результаты операций соединения, используйте средства оркестрации и прием из команд запросов.