Варианты использования материализованных представлений
Материализованные представления предоставляют статистический запрос к исходной таблице или другому материализованному представлению. В этой статье рассматриваются распространенные и расширенные варианты использования материализованных представлений.
Распространенные варианты использования
Ниже приведены распространенные сценарии, которые можно решить с помощью материализованного представления.
Обновление данных: Обновление данных путем возврата последней записи для каждой сущности с помощью
arg_max()
(функция агрегирования). Например, создайте представление, которое материализует только записи, полученные с этого момента:.create materialized-view ArgMax on table T { T | summarize arg_max(Timestamp, *) by User }
Уменьшение разрешения данных Уменьшите разрешение данных, вычисляя периодическую статистику по необработанным данным. Используйте различные агрегатные функции по периодам времени. Например, поддерживайте актуальную snapshot отдельных пользователей в день:
.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.
Расширенный сценарий
Материализованное представление можно использовать для обработки событий создания, обновления и удаления. При обработке записей с неполными или устаревшими сведениями для каждого столбца материализованное представление может предоставлять последние обновления для каждого столбца, за исключением удаленных сущностей.
Рассмотрим следующую входную таблицу с именем Events
:
Ввод
Отметка времени | Жвачки | ID | 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
}
Выходные данные
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
был удален.
Отметка времени | ID | col1 | col2 | col3 |
---|---|---|---|---|
2023-10-24 02:00:00.0000000 | 1 | 1 | 23 | 33 |
Материализованные представления и политики обновления
Материализованные представления и политики обновления работают по-разному и обслуживают разные варианты использования. Используйте следующие рекомендации, чтобы определить, какой из них следует использовать:
Материализованные представления подходят для агрегирования, а политики обновления — нет. Политики обновления выполняются отдельно для каждого пакета приема и, следовательно, могут выполнять агрегаты только в одном пакете приема. Если требуется статистический запрос, всегда используйте материализованные представления.
Политики обновления полезны для преобразований данных, обогащений с помощью таблиц измерений (обычно с помощью оператора поиска) и других операций с данными, которые могут выполняться в область одного приема.
Политики обновления выполняются во время приема. Данные недоступны для запросов в исходной или целевой таблице, пока не будут запущены все политики обновления. Материализованные представления, с другой стороны, не являются частью конвейера приема. Процесс материализации периодически выполняется в фоновом режиме после приема. Записи в исходной таблице доступны для запросов до их материализации.
Как политики обновления, так и материализованные представления могут включать объединения, но их эффективность ограничена конкретными сценариями. В частности, соединения подходят только в том случае, если данные, необходимые для объединения с обеих сторон, доступны во время политики обновления или процесса материализации. Если совпадающие сущности будут приниматься при выполнении политики обновления или материализации, существует риск упустить данные. Дополнительные сведения см
dimension tables
. в статье Параметр запроса материализованного представления , а также таблицы фактов и измерений.
Примечание
Если вам нужно материализовать соединения, которые не подходят для политик обновления и материализованных представлений, вы можете организовать для этого собственный процесс, используя средства оркестрации и прием из команд запроса.
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по