Политики материализованных представлений
В этой статье содержатся сведения о политиках, которые можно задать для материализованных представлений.
Политика хранения и кэширования
Материализованное представление имеет политику хранения и политику кэширования. Материализованное представление по умолчанию является производным от политик хранения и кэширования базы данных. Эти политики можно изменить с помощью команд управления политиками хранения или команд управления политиками кэширования.
Обе политики применяются только к материализованной части материализованного представления. Описание различий между материализованной частью и разностной частью см. в разделе Принцип работы материализованных представлений. Например, если для политики кэширования материализованного представления задано значение 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.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по