Ускорение запросов к озеру данных с помощью материализованных представлений
Этот раздел описывает, как оптимизировать производительность запросов к вашему озеру данных с помощью асинхронных материализованных представлений Selena.
Selena предлагает готовые возможности запросов к озеру данных, которые весьма эффективны для разведочных запросов и анализа данных в озере. В большинстве сценариев Data Cache может обеспечить кэширование файлов на уровне блоков, избегая снижения производительности, вызванного колебаниями удаленного хранилища и большим количеством операций I/O.
Однако, когда дело доходит до построения сложных и эффективных отчетов с использованием данных из озера или дальнейшего ускорения этих запросов, вы все еще можете столкнуться с проблемами производительности. С помощью асинхронных материализованных представлений вы можете достичь более высокой одновременности и лучшей производительности запросов для отчетов и приложений данных в озере.
Обзор
Selena поддерживает построение асинхронных материализованных представлений на основе внешних каталогов, таких как Hive catalog, Iceberg catalog, Hudi catalog, JDBC catalog и Paimon catalog. Материализованные представления на основе внешних каталогов особенно полезны в следующих сценариях:
-
Прозрачное ускорение отчетов озера данных
Чтобы обеспечить производительность запросов отчетов озера данных, инженеры данных обычно должны тесно работать с аналитиками данных, чтобы изучить логику построения слоя ускорения для отчетов. Если слой ускорения требует дальнейших обновлений, они долж ны соответствующим образом обновить логику построения, расписания обработки и операторы запросов.
Благодаря возможности перезаписи запросов материализованных представлений, ускорение отчетов может быть сделано прозрачным и незаметным для пользователей. Когда обнаруживаются медленные запросы, инженеры данных могут проанализировать паттерн медленных запросов и создать материализованные представления по требованию. Запросы на стороне приложения затем интеллектуально переписываются и прозрачно ускоряются материализованным представлением, что позволяет быстро улучшить производительность запросов без изменения логики бизнес-приложения или оператора запроса.
-
Инкрементальное вычисление real-time данных, связанных с историческими данными
Предположим, что ваше бизнес-приложение требует связывания real-time данных в нативных таблицах Selena и исторических данных в озере данных для инкрементальных вычислений. В этой ситуации материализованные представления могут предоставить простое решение. Например, если таблица фактов real-time является нативной таблицей в Selena, а таблица изме рений хранится в озере данных, вы можете легко выполнять инкрементальные вычисления, создав материализованные представления, которые связывают нативную таблицу с таблицей во внешних источниках данных.
-
Быстрое построение слоев метрик
Вычисление и обработка метрик могут столкнуться с трудностями при работе с данными высокой размерности. Вы можете использовать материализованные представления, которые позволяют выполнять предварительную агрегацию данных и rollup, чтобы создать относительно легкий слой метрик. Более того, материализованные представления могут обновляться автоматически, что дополнительно снижает сложность вычисления метрик.
Материализованные представления, Data Cache и нативные таблицы в Selena — все это эффективные методы достижения значительного повышения производительности запросов. В следующей таблице сравниваются их основные различия:
| Data Cache | Материализованное представление | Нативная таблица | |
|---|---|---|---|
| Загрузка и обновление данных | Запросы автоматически запускают кэширование данных. | Задач и обновления запускаются автоматически. | Поддерживает различные методы импорта, но требует ручного обслуживания задач импорта |
| Гранулярность кэширования данных |
| Хранит предварительно вычисленные результаты запросов | Хранит данные на основе схемы таблицы |
| Производительность запросов | Data Cache ≤ Материализованное представление = Нативная таблица | ||
| Оператор запроса |
|
| Требует изменения операторов запросов для запроса к нативной таблице |
По сравнению с прямым запросом данных из озера или загрузкой данных в нативные таблицы, материализованные представления предлагают нес колько уникальных преимуществ:
- Ускорение с локальным хранилищем: Материализованные представления могут использовать преимущества ускорения Selena с локальным хранилищем, такие как индексы, partitioning, bucketing и collocate groups, что приводит к лучшей производительности запросов по сравнению с прямым запросом данных из озера данных.
- Нулевое обслуживание задач загрузки: Материализованные представления обновляют данные прозрачно через автоматические задачи обновления. Нет необходимости обслуживать задачи загрузки для выполнения запланированных обновлений данных. Кроме того, материализованные представления на основе Hive, Iceberg и Paimon catalog могут обнаруживать изменения данных и выполнять инкрементальные обновления на уровне partition.
- Интеллектуальная перезапись запросов: Запросы могут быть прозрачно переписаны для использования материализованных представлений. Вы можете получить выгоду от ускорения мгновенно, без необходимости изменять операторы запросов, используемые вашим приложением.
Поэтому мы рекомендуем использовать материализованные представления в следующих сценариях:
- Даже когда включен Data Cache, производительность запросов не соответствует вашим требованиям к задержке запроса и одновременности.
- Запросы включают многократно используемые компоненты, такие как фиксированные агрегатные функции или паттерны join.
- Данные организованы в partitions, в то время как запросы включают агрегацию на относительно высоком уровне (например, агрегация по дням).
В следующих сценариях мы рекомендуем приоритизировать ускорение через Data Cache:
- Запросы не имеют много многократно используемых компонентов и могут сканировать любые данные из озера данных.
- Удаленное хранилище имеет значительные колебания или нестабильность, что потенциально может повлиять на доступ.
Создание материализованных представлений на основе внешних каталогов
Создание материализованного представления для таблиц во внешних каталогах аналогично созданию материализованного представления для нативных таблиц Selena. Вам нужно только установить подходящую стратегию обновления в соответствии с используемым источником данных и вручную включить перезапись запросов для материализованных представлений на основе внешних каталогов.
Материализованные представления внешних таблиц не поддерживают автоматическое обновление запускаемое изменениями данных базовой таблицы. Они поддерживают только асинхронное обновление с фиксированным интервалом и ручное обновление.
Выбор подходящей стратегии обновления
В настоящее время Selena не может обнаруживать изменения данных на уровне partition в Hudi catalogs. Поэтому выполняется полное обновление после запуска задачи.
Для Hive Catalog, Iceberg Catalog (начиная с v1.5.2), JDBC catalog (начиная с v1.5.2, только для MySQL таблиц с range-partitioned) и Paimon Catalog (начиная с v1.5.2), Selena поддерживает обнаружение изменений данных на уровне partition. В результате Selena может:
-
Обновлять только partitions с изменениями данных, чтобы избежать полного обновления, снижая потребление ресурсов, вызванное обновлением.
-
Обеспечивать согласованность данных в некоторой степени во время перезаписи запросов. Если есть изменения данных в базовой таблице в озере данных, запрос не будет переписан для использования материализованного представления.
Вы все еще можете выбрать допустить определенный уровень несогласованности данных, установив свойство mv_rewrite_staleness_second при создании материализованного представления. Для получения дополнительной информации см. CREATE MATERIALIZED VIEW.
Обратите внимание, что если вам нужно обновлять по partition, ключи partitioning материализованного представления должны быть включены в ключи базовой таблицы.
Начиная с v1.5.2, Selena поддерживает создание partitioned материализованных представлений для Iceberg таблиц с Partition Transforms, и материализованные представления partitioned по столбцу после трансформации. В настоящее время поддерживаю тся только Iceberg таблицы с трансформациями identity, year, month, day или hour.
Следующий пример показывает определение Iceberg таблицы с трансформацией partition day и создает материализованное представление с выровненными partitions на ее основе:
-- Определение Iceberg таблицы.
CREATE TABLE spark_catalog.test.iceberg_sample_datetime_day (
id BIGINT,
data STRING,
category STRING,
ts TIMESTAMP)
USING iceberg
PARTITIONED BY (days(ts))
-- Создание материализованного представления для Iceberg таблицы.
CREATE MATERIALIZED VIEW `test_iceberg_datetime_day_mv` (`id`, `data`, `category`, `ts`)
PARTITION BY (`ts`)
DISTRIBUTED BY HASH(`id`)
REFRESH MANUAL
AS
SELECT
`iceberg_sample_datetime_day`.`id`,
`iceberg_sample_datetime_day`.`data`,
`iceberg_sample_datetime_day`.`category`,
`iceberg_sample_datetime_day`.`ts`
FROM `iceberg`.`test`.`iceberg_sample_datetime_day`;
Для Hive catalogs вы можете включить функцию обновления кэша метаданных Hive, чтобы позволить Selena обнаруживать изменения данных на уровне partition. Когда эта функция включена, Selena периодически обращается к Hive Metastore Service (HMS) или AWS Glue для проверки информации метаданных о недавно запрошенных горячих данных.
Чтобы включить функцию обновления кэша метаданных Hive, вы можете установить следующий элемент динамической конфигурации FE, используя ADMIN SET FRONTEND CONFIG:
Элементы конфигурации
enable_background_refresh_connector_metadata
По умолчанию: true в v1.5.2, false в v1.5.2
Описание: Включать ли периодическое обновление кэша метаданных Hive. После включения Selena опрашивает metastore (Hive Metastore или AWS Glue) вашего Hive cluster и обновляет кэшированные метаданные часто запрашиваемых Hive catalogs для восприятия изменений данных. True указывает на включение обновления кэша метаданных Hive, а false указывает на отключение.
background_refresh_metadata_interval_millis
По умолчанию: 600000 (10 минут)
Описание: Интервал между двумя последовательными обновлениями кэша метаданных Hive. Единица измерения: миллисекунды.
background_refresh_metadata_time_secs_since_last_access_secs
По умолчанию: 86400 (24 часа)
Описание: Время истечения задачи обновления кэша метаданных Hive. Для Hive catalog, к которому был осуществлен доступ, если к нему не было доступа более указанного времени, Selena прекращает обновление его кэшированных метаданных. Для Hive catalog, к которому не было доступа, Selena не будет обновлять его кэшированные метаданные. Единица измерения: секунды.
Начиная с v1.5.2, Selena поддерживает обнаружение изменений данных для Iceberg Catalog на уровне partition. В настоящее время поддерживаются только Iceberg V1 таблицы.