Поделиться через


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

Применимо: ✅Microsoft FabricAzure 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 см. в материализованных параметрах запроса и таблицах фактов и измерений.

Заметка

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