Перейти к основному содержимому

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

Эта тема описывает, как выполнять моделирование данных с помощью асинхронных материализованных представлений Selena. Таким образом, вы можете значительно упростить ETL-конвейер ваших хранилищ данных и существенно улучшить качество данных и производительность запросов.

Обзор

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

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

Использование материализованных представлений для моделирования данных может эффективно решить эти проблемы. Асинхронные материализованные представления Selena могут:

  • Упростить архитектуру хранилища данных: Поскольку Selena может предоставить универсальный опыт управления данными, вам не нужно поддерживать другие системы обработки данных, экономя человеческие и системные ресурсы, потраченные на них.
  • Облегчить опыт моделирования данных: Любой аналитик данных с базовыми знаниями SQL способен выполнять моделирование данных с Selena. Моделирование данных больше не является исключительной областью опытных инженеров данных.
  • Снизить сложность обслуживания: Асинхронные материализованные представления Selena могут автоматически управлять отношениями происхождения и зависимостями между слоями данных, устраняя необходимость в целой платформе данных для выполнения этой задачи.

Modeling-1

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

  1. Используйте представления для ассоциации данных реального времени с данными измерений, и используйте материализованные представления для ассоциации исторических данных из озера данных с данными измерений. Выполните необходимую очистку данных и семантическое сопоставление для получения детальных данных для промежуточного слоя, который отражает семантику, требуемую в ваших бизнес-сценариях.
  2. В слое приложений выполните соединение данных, агрегацию, объединение и оконные вычисления, адаптированные к различным бизнес-сценариям. Это даст представления для конвейеров реального времени и материализованные представления для конвейеров почти реального времени.
  3. На стороне приложения выберите подходящее аналитическое хранилище данных (ADS) для анализа запросов на основе ваших требований к своевременности и производительности. Эти ADS могут обслуживать панели мониторинга реального времени, BI почти реального времени, специальные запросы и запланированные отчеты.

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

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

Асинхронные материализованные представления Selena обладают следующими атомарными функциями, которые могут помочь в моделировании данных:

  • Автоматическое обновление: После загрузки данных в базовые таблицы материализованные представления могут автоматически обновляться. Вам не нужно поддерживать задачу планирования извне.
  • Секционированное обновление: Вычисления почти реального времени могут быть достигнуты через секционированное обновление материализованных представлений, построенных на таблицах с временными рядами.
  • Синергия с представлениями: Вы можете достичь многоуровневого моделирования, используя материализованные представления и логические представления, тем самым обеспечивая повторное использование промежуточного слоя и упрощение моделей данных.
  • Изменение схемы: Вы можете изменить результаты вычислений с помощью простых SQL-операторов, без необходимости изменения сложных конвейеров данных.

С этими функциями вы можете проектировать комплексные и адаптируемые модели данных для удовлетворения различных бизнес-потребностей и сценариев.

Автоматическое обновление

При создании асинхронного материализованного представления вы можете указать стратегию обновления, используя предложение REFRESH. В настоящее время Selena поддерживает следующие стратегии обновления асинхронных материализованных представлений:

  • Автоматическое обновление (REFRESH ASYNC): Задачи обновления запускаются каждый раз при изменении данных в базовых таблицах. Зависимости данных автоматически управляются материализованным представлением.
  • Запланированное обновление (REFRESH ASYNC EVERY (INTERVAL <refresh_interval>)): Задачи обновления запускаются через регулярные интервалы, например, каждую минуту, день или месяц. Если в базовых таблицах нет изменений данных, задача обновления не будет запущена.
  • Ручное обновление (REFRESH MANUAL): Задачи обновления запускаются только при выполнении REFRESH MATERIALIZED VIEW вручную. Эта стратегия обновления может использоваться, когда вы поддерживаете внешний фреймворк планирования для запуска задач обновления.

Синтаксис:

CREATE MATERIALIZED VIEW <name>
REFRESH
[ ASYNC |
ASYNC [START <time>] EVERY(<interval>) |
MANUAL
]
AS <query>

Секционированное обновление

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

  • PARTITION BY <column>: Вы можете ссылаться на тот же столбец секционирования для базовой таблицы и материализованного представления. В результате базовая таблица и материализованное представление секционируются с одинаковой детализацией.
  • PARTITION BY date_trunc(<column>): Вы можете использовать функцию date_trunc для назначения другой стратегии секционирования (на уровне детализации) для материализованного представления путем усечения единицы времени.
  • PARTITION BY { time_slice | date_slice }(<column>): По сравнению с date_trunc, time_slice и date_slice предлагают более гибкие настройки временной детализации, позволяя более точно контролировать секционирование на основе времени.

Синтаксис:

CREATE MATERIALIZED VIEW <name>
REFRESH ASYNC
PARTITION BY
[
<base_table_column> |
date_trunc(<granularity>, <base_table_column>) |
time_slice(<base_table_column>, <granularity>) |
date_slice(<base_table_column>, <granularity>)
]
AS <query>

Синергия с представлениями

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

Изменение схемы

  • Вы можете выполнить атомарный обмен между двумя асинхронными материализованными представлениями, используя оператор ALTER MATERIALIZED VIEW SWAP. Это позволяет создать новое материализованное представление с добавленными столбцами или измененными типами столбцов, а затем заменить старое новым.
  • Определение представлений может быть напрямую изменено с помощью оператора ALTER VIEW.
  • Обычные таблицы в Selena могут быть изменены с помощью операций SWAP или ALTER.
  • Кроме того, когда есть изменения в базовых таблицах (которые могут быть материализованными представлениями, представлениями или обычными таблицами), это запускает каскадные изменения в соответствующих материализованных представлениях.

Слоистое моделирование

Во многих реальных бизнес-сценариях существуют различные формы источников данных, включая детальные данные реального времени, данные измерений и исторические данные из озер данных. С другой стороны, бизнес-требования требуют разнообразных аналитических методов, таких как панели мониторинга реального времени, BI-запросы почти реального времени, специальные запросы и запланированные отчеты. Различные сценарии имеют разные требования — некоторые требуют гибкости, некоторые отдают приоритет производительности, в то время как другие подчеркивают экономическую эффективность.

Очевидно, что одно решение не может адекватно удовлетворить такие разносторонние требования. Selena может эффективно решить эти потребности, комбинируя использование представлений и материализованных представлений. Поскольку представления не поддерживают физических данных, каждый раз при запросе представления запрос анализируется и выполняется в соответствии с определением представления. В сравнении, материализованные представления, которые содержат предварительно вычисленные результаты, могут предотвратить накладные расходы повторного выполнения. Представления подходят для выражения бизнес-семантики и упрощения сложности SQL, но они не могут снизить затраты на выполнение запросов. Материализованные представления, с другой стороны, оптимизируют производительность запросов через предварительные вычисления и подходят для упрощения ETL-конвейеров.

Ниже приведено резюме различий между представлениями и материализованными представлениями:

ПредставлениеМатериализованное представление
Случаи использованияБизнес-моделирование, управление даннымиМоделирование данных, прозрачное ускорение, интеграция озера данных
Стоимость храненияНет стоимости храненияСтоимость хранения, связанная с хранением предварительно вычисленных результатов
Стоимость обновленияНет стоимости обновленияСтоимость обновления при обновлении данных базовой таблицы
Преимущества производительностиНет преимуществ производительностиУскорение запросов за счет повторного использования предварительно вычисленных результатов
Атрибут данных реального времениВозвращаются последние данные, поскольку запросы к представлениям вычисляются в реальном времени.Данные могут быть не актуальными, поскольку результаты предварительно вычислены.
ЗависимостьПредставления становятся недействительными при изменении имен базовых таблиц, поскольку они ссылаются на базовые таблицы по имени.Изменения имен базовых таблиц не влияют на доступность материализованных представлений, которые ссылаются на базовые таблицы по ID.
Синтаксис созданияCREATE VIEWCREATE MATERIALIZED VIEW
Синтаксис измененияALTER VIEWALTER MATERIALIZED VIEW

Вы можете использовать следующие операторы для изменения ваших представлений, материализованных представлений и базовых таблиц:

-- Изменить таблицу.
ALTER TABLE <table_name> ADD COLUMN <column_desc>;

-- Поменять местами две таблицы.
ALTER TABLE <table1> SWAP WITH <table2>;

-- Изменить определение представления.
ALTER VIEW <view_name> AS <query>;

-- Поменять местами два материализованных представления
-- (путем обмена имен двух материализованных представлений без влияния на данные внутри).
ALTER MATERIALIZED VIEW <mv1> SWAP WITH <mv2>;

-- Повторно активировать материализованное представление.
ALTER MATERIALIZED VIEW <mv_name> ACTIVE;

Изменения схемы следуют этим принципам:

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

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

  • Ручная активация: Вы можете вручную восстановить неактивное материализованное представление, выполнив ALTER MATERIALIZED VIEW <mv_name> ACTIVE. Этот оператор пересоздаст материализованное представление на основе его исходного SQL-определения. Обратите внимание, что SQL-определение должно оставаться действительным после изменений базовой схемы. В противном случае операция завершится неудачей.
  • Активация перед обновлением: Selena попытается активировать неактивное материализованное представление перед его обновлением.
  • Автоматическая активация: Selena попытается автоматически активировать неактивные материализованные представления. Однако своевременность этого процесса не может быть гарантирована. Вы можете отключить эту функцию, выполнив ADMIN SET FRONTEND CONFIG('enable_mv_automatic_active_check'='false'). Эта функция доступна начиная с версий v3.1.4 и v3.2.0.

Секционированное моделирование

В дополнение к слоистому моделированию, секционированное моделирование также является важным аспектом моделирования данных. Моделирование данных часто включает ассоциацию данных на основе бизнес-семантики и установку времени жизни данных (TTL) в соответствии с требованиями своевременности. Секционированное моделирование играет значительную роль в этом процессе.

Секционированное моделирование является важным аспектом моделирования данных, дополняющим слоистое моделирование. Оно включает ассоциацию данных на основе бизнес-семантики и установку времени жизни (TTL) для данных в соответствии с требованиями своевременности. Секционирование данных играет значительную роль в этом процессе.

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

Modeling-2

Как показано на рисунке выше, материализованное представление ассоциирует таблицу фактов с множественными таблицами измерений:

  • Вам нужно ссылаться на ключ секционирования конкретной базовой таблицы (обычно таблицы фактов) как на ключ секционирования материализованного представления (PARTITION BY fact_tbl.col) для ассоциации их стратегий секционирования. Каждое материализованное представление может быть ассоциировано только с одной базовой таблицей.
  • Когда данные в секции ссылочной таблицы изменяются, соответствующая секция в материализованном представлении обновляется без влияния на другие секции.
  • Когда данные в не-ссылочных таблицах изменяются, все материализованное представление обновляется по умолчанию. Однако вы можете выбрать игнорирование изменений данных в определенных не-ссылочных базовых таблицах, чтобы материализованное представление не обновлялось при изменении данных в этих таблицах.

Такая ассоциация секций поддерживает различные бизнес-сценарии:

  • Обновления таблицы фактов: Вы можете секционировать таблицу фактов на мелкозернистом уровне, например, ежедневно или ежечасно. После обновления таблицы фактов соответствующие секции в материализованном представлении автоматически обновляются.
  • Обновления таблицы измерений: Обычно обновления данных в таблицах измерений приводят к обновлению всех ассоциированных результатов, что может быть дорогостоящим. Вы можете выбрать игнорирование обновлений данных в некоторых таблицах измерений, чтобы избежать обновления всего материализованного представления, или вы можете указать временной диапазон, чтобы только секции в пределах временного диапазона могли обновляться.
  • Автоматическое обновление внешних таблиц: Во внешних источниках данных, таких как Apache Hive или Apache Iceberg, изменения данных происходят на уровне секций. Материализованные представления Selena могут подписываться на изменения во внешних каталогах на уровне секций и обновлять только соответствующую секцию материализованного представления.
  • TTL: При установке стратегии секционирования для материализованного представления вы можете установить количество недавних секций для сохранения, тем самым сохраняя только самые последние данные. Это полезно в бизнес-сценариях, когда аналитики запрашивают только актуальные данные из определенного временного окна, и им не нужно сохранять все исторические данные.

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

  • partition_refresh_number: количество секций для обновления в каждой операции обновления.
  • partition_ttl_number: количество недавних секций для сохранения.
  • excluded_trigger_tables: таблица, изменения данных которой могут игнорироваться, чтобы избежать запуска автоматического обновления.
  • auto_refresh_partitions_limit: количество секций для обновления в каждой операции автоматического обновления.
  • excluded_refresh_tables: Исключить таблицы, которые нужно обновить, обычно используется вместе с excluded_trigger_tables.

Для получения дополнительной информации см. CREATE MATERIALIZED VIEW.

В настоящее время секционированные материализованные представления имеют следующие ограничения:

  • Вы можете построить секционированное материализованное представление только на основе секционированной таблицы.
  • Вы можете использовать только столбцы типа DATE или DATETIME в качестве ключа секционирования. Тип данных STRING не поддерживается.
  • Вы можете выполнять только свертку секций, используя функции date_trunc, time_slice и date_slice.
  • Вы можете указать только один столбец в качестве ключа секционирования. Множественные столбцы секционирования не поддерживаются.

Резюме

Использование асинхронных материализованных представлений Selena для моделирования данных предлагает преимущество упрощения управления конвейерами и повышения эффективности и гибкости моделирования данных через декларативный язык моделирования.

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