Политики материализованных представлений

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

Политика хранения и кэширования

Материализованное представление имеет политику хранения и политику кэширования. Материализованное представление по умолчанию является производным от политик хранения и кэширования базы данных. Эти политики можно изменить с помощью команд управления политиками хранения или команд управления политиками кэширования.

Обе политики применяются только к материализованной части материализованного представления. Описание различий между материализованной частью и разностной частью см. в разделе Принцип работы материализованных представлений. Например, если для политики кэширования материализованного представления задано значение 7d, а для политики кэширования исходной таблицы задано значение 0d, при запросе материализованного представления по-прежнему могут быть пропущены диски. Это происходит потому, что исходная таблица (разностная часть) также участвует в запросе.

Политика хранения материализованного представления не связана с политикой хранения исходной таблицы. Политика хранения исходной таблицы может быть короче политики хранения материализованного представления, если исходные записи требуются в течение более короткого периода. Мы рекомендуем использовать политику минимального хранения не менее нескольких дней, а для исходной таблицы — значение true. Этот параметр обеспечивает быстрое восстановление ошибок и диагностики.

Примечание

Политика нулевого хранения в исходной таблице не поддерживается.

Политики хранения и кэширования зависят от времени создания экстента. Последнее обновление записи определяет время создания экстента для материализованного представления.

Примечание

Процесс материализации пытается свести к минимуму объем обновлений материализованной части представления. В случаях, когда запись не требуется обновлять в представлении, она не обновляется. Например, если материализованное представление является take_any(*) агрегированием, новые записи с теми же ключами группы не будут повторно приниматься в представление, и поэтому политика хранения будет приниматься самой ранней записью.

Политика секционирования

Политика секционирования может применяться к материализованному представлению. Рекомендуется настраивать политику секционирования в материализованном представлении только в том случае, если большинство или все запросы представления фильтруются по одному из ключей группирования по материализованному представлению. Такая ситуация распространена в мультитенантных решениях, где одним из ключей группирования по материализованному представлению является идентификатор клиента (например, tenantId, customerId). Дополнительные сведения см. в первом варианте использования, описанном на странице поддерживаемых сценариев политики секционирования .

Команды для изменения политики секционирования материализованного представления см. в разделе Команды политики секционирования.

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

Политика безопасности на уровне строк

Безопасность на уровне строк может применяться к материализованному представлению с несколькими ограничениями:

  • Политика может применяться только к материализованным представлениям с агрегатными функциями arg_max()/arg_min()/take_any() или когда запрос безопасности на уровне строк ссылается на группирование по ключам агрегирования материализованного представления.
  • Политика применяется только к материализованной части представления.
    • Если та же политика безопасности на уровне строк не определена в исходной таблице материализованного представления, запрос к материализованному представлению может вернуть записи, которые должны быть скрыты политикой. Это происходит потому, что запрос материализованного представления также запрашивает исходную таблицу.
    • Мы рекомендуем определить одну и ту же политику безопасности на уровне строк в исходной таблице и материализованном представлении, если представление является arg_max() или arg_min()/take_any()).
  • При определении политики безопасности на уровне строк в исходной таблице материализованного представления arg_max() или arg_min()/take_any() команда завершается ошибкой, если в самом материализованном представлении не определена политика безопасности на уровне строк. Цель сбоя — оповещать пользователя о потенциальной утечке данных, так как материализованное представление может предоставлять информацию. Чтобы устранить эту ошибку, выполните одно из следующих действий.
    • Определите политику безопасности на уровне строк в материализованном представлении.
    • Чтобы игнорировать ошибку, добавьте allowMaterializedViewsWithoutRowLevelSecurity свойство в команду alter policy. Пример:
    .alter table SourceTable policy row_level_security enable with (allowMaterializedViewsWithoutRowLevelSecurity=true) "RLS_function"

Команды для настройки политики безопасности на уровне строк в материализованном представлении см. в разделе команды политики row_level_security.