Варианты использования материализованных представлений

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

Распространенные варианты использования

Ниже приведены распространенные сценарии, которые можно решить с помощью материализованного представления.

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

Примечание

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