материализованные представления;

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

Материализованные представления всегда возвращают актуальный результат статистического запроса (всегда свежий). Запросы к материализованному представлению являются более производительными, чем выполнение агрегирования непосредственно над исходной таблицей.

Примечание

Зачем использовать материализованные представления?

Инвестируя ресурсы (хранилище данных, фоновые циклы ЦП) для материализованных представлений часто используемых агрегатов, вы получаете следующие преимущества:

  • Повышение производительности. Запросы к материализованному представлению обычно выполняются лучше, чем запросы к исходной таблице для той же статистической функции.

  • Свежесть: Запрос материализованного представления всегда возвращает самые актуальные результаты, независимо от того, когда в последний раз происходила материализация. Запрос объединяет материализованную часть представления с записями в исходной таблице, которые еще не были материализованы ( delta часть), всегда предоставляя самые актуальные результаты.

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

Примеры вариантов использования см. в разделе Варианты использования материализованного представления.

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

Материализованное представление состоит из двух компонентов:

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

Запрос к материализованному представлению объединяет материализованную часть с разностной частью, предоставляя актуальный результат статистического запроса. Автономный процесс материализации прием новых записей из разностной таблицы в материализованную таблицу и обновление существующих записей. Если пересечение между разностной и материализованной частью большое, а многие записи требуют обновления, это может негативно повлиять на процесс материализации. Сведения об устранении неполадок в таких ситуациях см. в разделе Мониторинг материализованных представлений .

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

Существует два способа запроса материализованного представления:

  • Запрос всего представления: при запросе к материализованному представлению по его имени, аналогично запросу к таблице, запрос материализованного представления объединяет материализованную часть представления с записями в исходной таблице, которые еще не были материализованы ().delta

    • При запросе к материализованному представлению всегда возвращаются самые актуальные результаты на основе всех записей, понесшихся в исходную таблицу. Дополнительные сведения о материализованных и нематериализованных частях в материализованном представлении см. в разделе Принцип работы материализованных представлений.
    • Этот параметр может работать не лучше, так как ему необходимо материализовать delta часть во время запроса. Производительность в этом случае зависит от возраста представления и фильтров, применяемых в запросе. Раздел оптимизатора запросов материализованного представления содержит возможные способы повышения производительности запросов при выполнении запросов ко всему представлению.
  • Запрашивать только материализованную часть: другой способ запроса представления — использовать функциюmaterialized_view() . Этот параметр поддерживает запросы только к материализованной части представления, указывая при этом максимальную задержку, доступную пользователю.

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

Совет

Запросы к материализованной части всегда выполняются лучше, чем запросы ко всему представлению. Всегда используйте функцию , materialized_view() если это применимо для вашего варианта использования.

  • Материализованные представления участвуют в межкластовых запросах или запросах между базами данных, но не включаются в объединения с подстановочными знаками или поиск.

    • Следующие примеры включают материализованные представления с именем ViewName:
    cluster('cluster1').database('db').ViewName
    cluster('cluster1').database('*').ViewName
    database('*').ViewName
    database('DB*').ViewName
    database('*').materialized_view('ViewName')
    database('DB*').materialized_view('ViewName')
    
    • В следующих примерах не содержатся записи из материализованных представлений:
    cluster('cluster1').database('db').*
    database('*').View*
    search in (*)
    search * 
    

Оптимизатор запросов материализованного представления

При запросе всего представления материализованная часть объединяется с во delta время запроса. Сюда входит агрегирование delta и соединение его с материализованной частью.

  • Выполнение запросов ко всему представлению лучше, если запрос включает фильтры по группам по ключам запроса материализованного представления. Дополнительные советы по созданию материализованного представления на основе шаблона запроса см. в .create materialized-view разделе Советы по производительности .
  • Оптимизатор запросов выбирает стратегии суммирования и объединения, которые, как ожидается, повысят производительность запросов. Например, решение о том, следует ли перемешивать запрос, зависит от количества записей в delta части. Следующие свойства запроса клиента обеспечивают некоторый контроль над примененными оптимизациями. Эти свойства можно протестировать с помощью запросов материализованного представления и оценить их влияние на производительность запросов.
Имя свойства запроса клиента Тип Описание
materialized_view_query_optimization_costbased_enabled bool Если задано значение false, отключает оптимизацию суммы и соединения в запросах материализованного представления. Использует стратегии по умолчанию. По умолчанию — true.
materialized_view_shuffle dynamic Принудительное перемешивание запроса материализованного представления и (необязательно) предоставление определенных ключей для перетасовки. См. примеры ниже.

Примеры

  1. Выполните запрос ко всему представлению. Самые последние записи в исходной таблице включаются:

    ViewName
    
  2. Запрашивайте только материализованную часть представления, независимо от того, когда она была материализована в последний раз.

    materialized_view("ViewName")
    
  3. Выполните запрос ко всему представлению и предоставьте "подсказку" для использования shuffle стратегии. Самые последние записи в исходной таблице включаются:

    • Пример 1. Перетасовка на основе столбца Id (аналогично использованию hint.shufflekey=Id):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName", "Keys" : [ "Id" ] }]);
    ViewName
    
    • Пример 2. Перетасовка на основе всех ключей (аналогично использованию hint.strategy=shuffle):
    set materialized_view_shuffle = dynamic([{"Name" : "ViewName" }]);
    ViewName
    

Вопросы производительности

Ниже перечислены main участников, которые могут повлиять на работоспособность материализованного представления:

  • Ресурсы кластера: Как и любой другой процесс, выполняемый в кластере, материализованные представления потребляют ресурсы (ЦП, память) из кластера. Если кластер перегружен, добавление в него материализованных представлений может привести к снижению производительности кластера. Отслеживайте работоспособность кластера с помощью метрик работоспособности кластера. Оптимизированное автомасштабирование в настоящее время не учитывает работоспособность материализованных представлений в рамках правил автомасштабирования.

  • Перекрытие с материализованными данными: Во время материализации все новые записи, попадавшие в исходную таблицу с момента последней материализации (дельта), обрабатываются и материализуются в представление. Чем выше пересечение между новыми записями и уже материализованными записями, тем хуже будет производительность материализованного представления. Материализованное представление лучше всего работает, если обновляемое количество записей (например, в arg_max представлении) является небольшим подмножеством исходной таблицы. Если все или большинство записей материализованного представления необходимо обновлять в каждом цикле материализации, то материализованное представление может работать неправильно.

  • Скорость приема: Нет жестко заданных ограничений на объем или скорость приема данных в исходной таблице материализованного представления. Однако рекомендуемая скорость приема для материализованных представлений не превышает 1–2 ГБ/с. Более высокие показатели приема могут по-прежнему работать хорошо. Производительность зависит от размера кластера, доступных ресурсов и объема пересечения с существующими данными.

  • Число материализованных представлений в кластере: Приведенные выше рекомендации относятся к каждому отдельному материализованному представлению, определенному в кластере. Каждое представление использует собственные ресурсы, и многие представления конкурируют друг с другом за доступные ресурсы. Хотя нет жестко заданных ограничений на количество материализованных представлений в кластере, кластер может не обрабатывать все материализованные представления, если их много. Политику емкости можно изменить, если в кластере имеется более одного материализованного представления. Увеличьте значение ClusterMinimumConcurrentOperations в политике, чтобы одновременно запускать более материализованные представления.

  • Определение материализованного представления. Определение материализованного представления должно быть определено в соответствии с рекомендациями по запросам для обеспечения оптимальной производительности запросов. Дополнительные сведения см. в разделе Советы по повышению производительности команд.

Материализованное представление по сравнению с материализованным представлением

Материализованное представление можно создать поверх другого материализованного представления, если исходное материализованное представление является представлением дедупликации. В частности, агрегирование исходного материализованного представления должно выполняться take_any(*) для дедупликации исходных записей. Второе материализованное представление может использовать любые поддерживаемые статистические функции. Конкретные сведения о создании материализованного представления в материализованном представлении см. в разделе.create materialized-view Команда .

Совет

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