CREATE MATERIALIZED VIEW
CREATE MATERIALIZED VIEW создает материализованное представление. Информацию об использовании материализованных представлений см. в разделах Синхронное материализованное представление и Асинхронное материализованное представление.
ПРЕДУПРЕЖДЕНИЕ
- Только пользователи с привилегией CREATE MATERIALIZED VIEW в базе данных, где находится базовая таблица, могут создавать материализованное представление.
- Начиная с версии v1.5.2, Selena поддерживает создание синхронных материализованных представлений в shared-data кластерах.
Создание материализованного представления — это асинхронная операция. Успешное выполнение этой команды означает, что задача создания материализованного представления успешно отправлена. Вы можете просмотреть статус сборки синхронного материализованного представления в базе данных с помощью команды SHOW ALTER MATERIALIZED VIEW, а асинхронного материализованного представления — путем запроса метаданных представлений tasks и task_runs в Information Schema.
Selena поддерживает асинхронные материализованные представления начиная с версии v1.5.2. Основные различия между асинхронными и синхронными материализованными представлениями в предыдущих версиях следующие:
| Агрегация по одной таблице | Многотабличный join | Переписывание запросов | Стратегия обновления | Базовая таблица | |
|---|---|---|---|---|---|
| ASYNC MV | Да | Да | Да |
| Множество таблиц из:
|
| SYNC MV (Rollup) | Ограниченный выбор агрегатных функций | Нет | Да | Синхронное обновление при загрузке данных | Одна таблица в каталоге по умолчанию |
Синхронное материализованное представление
Синтаксис
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [database.]<mv_name>
[COMMENT ""]
[PROPERTIES ("key"="value", ...)]
AS
<query_statement>
Параметры в квадратных скобках [] являются необязательными.
Параметры
mv_name (обязательный)
Имя материализованного представления. Требования к именованию следующие:
- Имя должно состоять из букв (a-z или A-Z), цифр (0-9) или символов подчеркивания (_) и может начинаться только с буквы.
- Длина имени не может превышать 64 символа.
- Имя чувствительно к регистру.
COMMENT (необязательный)
Комментарий к материализованному представлению. Обратите внимание, что COMMENT должен быть размещен после mv_name. В противном случае материализованное представление не может быть создано.
query_statement (обязательный)
Запрос для создания материализованного представления. Его результат — это данные в материализованном представлении. Синтаксис следующий:
SELECT select_expr[, select_expr ...]
[WHERE where_expr]
[GROUP BY column_name[, column_name ...]]
[ORDER BY column_name[, column_name ...]]
-
select_expr (обязательный)
Все столбцы в запросе, то есть все столбцы в схеме материализованного представления. Этот параметр поддерживает следующие значения:
- Простые столбцы или агрегированные столбцы, такие как
SELECT a, abs(b), min(c) FROM table_a, гдеa,bиc— имена столбцов в базовой таблице. Если вы не укажете имена столбцов для материализованного представления, Selena автоматически назначит имена столбцам. - Выражения, такие как
SELECT a+1 AS x, b+2 AS y, c*c AS z FROM table_a, гдеa+1,b+2иc*c— выражения, которые ссылаются на столбцы в базовых таблицах, аx,yиz— псевдонимы, назначенные столбцам в материализованном представлении.
ПРИМЕЧАНИЕ
- Вы должны указать хотя бы один столбец в
select_expr. - При создании синхронного материализованного представления с агрегатной функцией необходимо указать предложение GROUP BY и указать хотя бы один столбец GROUP BY в
select_expr. - Синхронные материализованные представления не поддерживают предложения, такие как JOIN и предложение HAVING в GROUP BY.
- Начиная с версии v1.5.2, каждое синхронное материализованное представление может поддерживать более одной агрегатной функции для каждого столбца базовой таблицы, например, запросы такие как
select b, sum(a), min(a) from table group by b. - Начиная с версии v1.5.2, синхронные материализованные представления поддерживают сложные выражения для SELECT и агрегатных функций, например, запросы такие как
select b, sum(a + 1) as sum_a1, min(cast (a as bigint)) as min_a from table group by bилиselect abs(b) as col1, a + 1 as col2, cast(a as bigint) as col3 from table. Следующие ограничения накладываются на сложные выражения, используемые для синхронных материализованных представлений:- Каждое сложное выражение должно иметь псевдоним, и разные псевдонимы должны быть назначены разным сложным выражениям среди всех синх ронных материализованных представлений базовой таблицы. Например, запросы
select b, sum(a + 1) as sum_a from table group by bиselect b, sum(a) as sum_a from table group by bне могут использоваться для создания синхронных материализованных представлений для одной и той же базовой таблицы. Вы можете установить разные псевдонимы для сложного выражения. - Вы можете проверить, переписаны ли ваши запросы синхронными материализованными представлениями, созданными со сложными выражениями, выполнив
EXPLAIN <sql_statement>. Для получения дополнительной информации см. Анализ запросов.
- Каждое сложное выражение должно иметь псевдоним, и разные псевдонимы должны быть назначены разным сложным выражениям среди всех синх ронных материализованных представлений базовой таблицы. Например, запросы
- Простые столбцы или агрегированные столбцы, такие как
-
WHERE (необязательный)
Начиная с версии v1.5.2, синхронные материализованные представления поддерживают предложение WHERE, которое может фильтровать строки, используемые для материализованного представления.
-
GROUP BY (необязательный)
Столбец GROUP BY запроса. Если этот параметр не указан, данные не будут группироваться по умолчанию.
-
ORDER BY (необязательный)
Столбец ORDER BY запроса.
- Столбцы в предложении ORDER BY должны быть объявлены в том же порядке, что и столбцы в
select_expr. - Если запрос содержит предложение GROUP BY, столбцы ORDER BY должны быть идентичны столбцам GROUP BY.
- Если этот параметр не указан, система автоматически дополнит столбец ORDER BY в соответствии со следующими правилами:
- Если материализованное представление имеет тип AGGREGATE, все столбцы GROUP BY автоматически используются в качестве ключей сортировки.
- Если материализованное представление не имеет типа AGGREGATE, Selena автоматически выбирает ключи сортировки на основе префиксных столбцов.
- Столбцы в предложении ORDER BY должны быть объявлены в том же порядке, что и столбцы в
Запрос синхронного материализованного представления
Поскольку синхронное материализованное представление по сути является индексом базовой таблицы, а не физической таблицей, вы можете запросить синхронное материализованное представление только с помощью подсказки [_SYNC_MV_]:
-- Не опускайте квадратные скобки [] в подсказке.
SELECT * FROM <mv_name> [_SYNC_MV_];
ПРЕДУПРЕЖДЕНИЕ
В настоящее время Selena автоматически генерирует имена для столбцов в синхронном материализованном представлении, даже если вы указали для них псевдонимы.
Автомат ическое переписывание запросов с синхронным материализованным представлением
Когда выполняется запрос, который соответствует шаблону синхронного материализованного представления, исходный запрос автоматически переписывается, и используются промежуточные результаты, хранящиеся в материализованном представлении.
В следующей таблице показано соответствие между агрегатной функцией в исходном запросе и агрегатной функцией, используемой для построения материализованного представления. Вы можете выбрать соответствующую агрегатную функцию для построения материализованного представления в соответствии с вашим бизнес-сценарием.
| агрегатная функция в исходном запросе | агрегатная функция материализованного представления |
|---|---|
| sum | sum |
| min | min |
| max | max |
| count | count |
| bitmap_union, bitmap_union_count, count(distinct) | bitmap_union |
| hll_raw_agg, hll_union_agg, ndv, approx_count_distinct | hll_union |
| percentile_approx, percentile_union | percentile_union |
Помимо вышеуказанных функций, начиная с Selena v1.5.2, синхронные материализованные представления также поддерживают общие агрегатные функции. Для получения дополнительной информации об общих агрегатных функциях см. Состояния общих агрегатных функций.
-- Создать синхронное материализованное представление test_mv1 для хранения агрегатных состояний.
CREATE MATERIALIZED VIEW test_mv1
AS
SELECT
dt,
-- Исходные агрегатные функции.
min(id) AS min_id,
max(id) AS max_id,
sum(id) AS sum_id,
bitmap_union(to_bitmap(id)) AS bitmap_union_id,
hll_union(hll_hash(id)) AS hll_union_id,
percentile_union(percentile_hash(id)) AS percentile_union_id,
-- Функции состояния общих агрегатных функций.
ds_hll_count_distinct_union(ds_hll_count_distinct_state(id)) AS hll_id,
avg_union(avg_state(id)) AS avg_id,
array_agg_union(array_agg_state(id)) AS array_agg_id,
min_by_union(min_by_state(province, id)) AS min_by_province_id
FROM t1
GROUP BY dt;
Асинхронное материализованное пред ставление
Синтаксис
CREATE MATERIALIZED VIEW [IF NOT EXISTS] [database.]<mv_name>
[COMMENT ""]
-- Вы должны указать либо `distribution_desc`, либо `refresh_scheme`, либо оба.
-- distribution_desc
[DISTRIBUTED BY HASH(<bucket_key>[,<bucket_key2> ...]) [BUCKETS <bucket_number>]]
-- refresh_desc
[REFRESH
-- refresh_moment
[IMMEDIATE | DEFERRED]
-- refresh_scheme
[ASYNC | ASYNC [START (<start_time>)] EVERY (INTERVAL <refresh_interval>) | MANUAL]
]
-- partition_expression
[PARTITION BY
[ <partition_column> [,...] ] | [ <date_function_expr> ]
]
-- order_by_expression
[ORDER BY (<sort_key>)]
[PROPERTIES ("key"="value", ...)]
AS
<query_statement>
Параметры в квадратных скобках [] явл яются необязательными.
Параметры
mv_name (обязательный)
Имя материализованного представления. Требования к именованию следующие:
- Имя должно состоять из букв (a-z или A-Z), цифр (0-9) или символов подчеркивания (_) и может начинаться только с буквы.
- Длина имени не может превышать 64 символа.
- Имя чувствительно к регистру.
ПРЕДУПРЕЖДЕНИЕ
Для одной базовой таблицы можно создать несколько материализованных представлений, но имена материализованных представлений в одной базе данных не могут дублироваться.
COMMENT (необязательный)
Комментарий к материализованному представлению. Обратите внимание, что COMMENT должен быть размещен после mv_name. В противном случае материализованное представление не может быть создано.
distribution_desc (необязательный)
Стратегия bucketing асинхронного материализованного представления. Selena поддерживает hash bucketing и random bucketing (начиная с версии v1.5.2). Если вы не указываете этот параметр, Selena использует стратегию random bucketing и автоматически устанавливает количество buckets.
ПРИМЕЧАНИЕ
При создании асинхронного материализованного представления необходимо указать либо
distribution_desc, либоrefresh_scheme, либо оба.
-
Hash bucketing:
Синтаксис
DISTRIBUTED BY HASH (<bucket_key1>[,<bucket_key2> ...]) [BUCKETS <bucket_number>]Для получения дополнительной информации см. Распределение данных.
ПРИМЕЧАНИЕ
Начиная с версии v1.5.2, Selena может автоматически устанавливать количество buckets (BUCKETS) при создании таблицы или добавлении раздела. Вам больше не нужно вручную устанавливать количество buckets. Подробную информацию см. в разделе установка количества buckets.
-
Random bucketing:
Если вы выбираете стратегию random bucketing и разрешаете Selena автоматически устанавливать количество buckets, вам не нужно указывать
distribution_desc. Однако, если вы хотите вручную установить количество buckets, вы можете воспользоваться следующим синтаксисом:DISTRIBUTED BY RANDOM BUCKETS <bucket_number>ПРЕДУПРЕЖДЕНИЕ
Асинхронные материализованные представления со стратегией random bucketing не могут быть назначены группе colocation.
Для получения дополнительной информации см. Random bucketing
refresh_moment (необязательный)
Момент обновления материализованного представления. Значение по умолчанию: IMMEDIATE. Допустимые значения:
IMMEDIATE: Обновить асинхронное материализованное представление немедленно после его создания.DEFERRED: Асинхронное материализованное представление не обновляется после создания. Вы можете вручную обновить материализованное представление или запланировать регулярные задачи обновления.
refresh_scheme (необязательный)
ПР ИМЕЧАНИЕ
- При создании асинхронного материализованного представления необходимо указать либо
distribution_desc, либоrefresh_scheme, либо оба.- Материализованные представления внешних таблиц не поддерживают автоматическое обновление по триггеру изменения данных базовой таблицы. Они поддерживают только асинхронное обновление с фиксированным интервалом и ручное обновление.
Стратегия обновления асинхронного материализованного представления. Допустимые значения:
ASYNC: Режим автоматического обновления. Каждый раз, когда изменяются данные базовой таблицы, материализованное представление автоматически обновляется.ASYNC [START (<start_time>)] EVERY(INTERVAL <interval>): Режим регулярного обновления. Материализованное представление обновляется регулярно с указанным интервалом. Вы можете указать интервал какEVERY (interval n day/hour/minute/second)с использованием следующих единиц:DAY,HOUR,MINUTEиSECOND. Значение по умолчанию —10 MINUTE. Вы можете дополнительно указать время начала обновления какSTART('yyyy-MM-dd hh:mm:ss'). Если время начала не указано, используется текущее время. Пример:ASYNC START ('2023-09-12 16:30:25') EVERY (INTERVAL 5 MINUTE).MANUAL: Режим ручного обновления. Материализованное представление не будет обновляться, если вы не запустите задачу обновления вручную.
Если этот параметр не указан, используется значение по умолчанию MANUAL.
partition_expression (необязательный)
Стратегия разделения асинхронного материализованного представления. Если этот параметр не указан, стратегия разделения по умолчанию не применяется.
Допустимые значения:
partition_column: Столбец(ы), используемые для разделения. ВыражениеPARTITION BY dtозначает разделение материализованного представления в соответствии со столбцомdt.date_function_expr: Сложное выражение с функциями дат, используемое для разделения.- Функция
date_trunc: Функция, используемая для усечения единицы времени.PARTITION BY date_trunc("MONTH", dt)означает, что столбецdtусекается до месяца в качестве единицы для разделения. Функцияdate_truncподдерживает усечение времени до единиц, включаяYEAR,MONTH,DAY,HOURиMINUTE. - Функция
str2date: Функция, используемая для преобразования разделов типа string базовой таблицы в типы дат.PARTITION BY str2date(dt, "%Y%m%d")означает, что столбецdtявляется типом даты STRING, формат даты которого"%Y%m%d". Функцияstr2dateподдерживает множество форматов дат, вы можете обратиться к str2date для получения дополнительной информации. Поддерживается с версии v1.5.2. - Функция
time_slice: Начиная с версии v1.5.2, вы можете дополнительно использовать эти функции для преобразования указанного времени в начало или конец временного интервала на основе указанной временной детализации, например,PARTITION BY date_trunc("MONTH", time_slice(dt, INTERVAL 7 DAY)), где time_slice должен иметь более тонкую детализацию, чем date_trunc. Вы можете использовать их для указания столбца GROUP BY с более тонкой детализацией, чем у ключа разделения, например,GROUP BY time_slice(dt, INTERVAL 1 MINUTE) PARTITION BY date_trunc('DAY', ts).
- Функция
Начиная с версии v1.5.2, асинхронные материализованные представления поддерживают многостолбцовые выражения разделов. Вы можете указать несколько столбцов разделов для материализованного представления для сопоставления всех или части столбцов разделов базовых таблиц.
Примечания для многостолбцовых выражений разделов:
-
В настоящее время многостолбцовые разделы в материализованных представлениях могут быть сопоставлены только напрямую со столбцами разделов базовой таблицы. Сопоставление с использованием функций или выражений на столбцах разделов базовой таблицы не поддерживается.
-
Поскольку выражения разделов Iceberg поддерживают функцию
transform, требуется дополнительная обработка при сопоставлении выражений разделов Iceberg с выражениями разделов материализованных представлений Selena. Соотношение сопоставления следующее:Iceberg Transform Выражение раздела Iceberg Выражение раздела материализованного представления Identity <col><col>hour hour(<col>)date_trunc('hour', <col>)day day(<col>)date_trunc('day', <col>)month month(<col>)date_trunc('month', <col>)year year(<col>)date_trunc('year', <col>)bucket bucket(<col>, <n>)Не поддерживается truncate truncate(<col>)Не поддерживается -
Для столбцов разделов, не относящихся к Iceberg, где вычисление выражений разделов не требуется, дополнительная обработка выражений разделов не требуется. Вы можете сопоставить их напрямую.
См. Пример -5 для подробных инструкций по многостолбцовым выражениям разделов.
ПРЕДУПРЕЖДЕНИЕ
Начиная с версии v1.5.2, Selena поддерживает создание асинхронных материализованных представлений со стратегией разделения List Partitioning.
- Вы можете создавать материализованные представления с разделением списка на основе таблиц, созданных со стратегией разделения List Partitioning или Expression partitioning.
- В настоящее время при создании материализованных представлений со стратегией разделения List Partitioning можно указать только один ключ раздела. Вы должны выбрать один ключ раздела, если базовая таблица имеет более одного ключа раздела.
- Поведение обновления и логика переписывания запросов материализованных представлений со стратегией разделения List Partitioning согласуются с теми, которые имеют стратегию разделения Range Partitioning.
order_by_expression (необязательный)
Ключ сортировки асинхронного материализованного представления. Если вы не указываете ключ сортировки, Selena выбирает некоторые из префиксных столбцов из столбцов SELECT в качестве ключей сортировки. Например, в select a, b, c, d ключами сортировки могут быть a и b. Этот параметр поддерживается начиная с Selena v1.5.2.
ПРИМЕЧАНИЕ Существует два разных использования
ORDER BYв материализованных представлениях:
ORDER BYв операторе CREATE MATERIALIZED VIEW определяет ключ сортировки материализованного представления, что помогает ускорить запросы на основе ключа сортировки. Это не влияет на способность материализованного представления к прозрачному ускорению на основе SPJG, но не гарантирует глобальную сортировку результатов запроса материализованного представления.ORDER BYв определении запроса материализованного представления гарантир ует глобальную сортировку результатов запроса, но предотвращает использование материализованного представления для прозрачного переписывания запросов на основе SPJG. ПоэтомуORDER BYне следует использовать в определении запроса материализованного представления, если MV используется для переписывания запросов.
INDEX (необязательный)
Асинхронные материализованные представления поддерживают индексы Bitmap и BloomFilter для ускорения производительности запросов, и их использование такое же, как и в обычных таблицах. Подробности об использовании и информацию об индексах Bitmap и BloomFilter см. в разделах Индекс Bitmap и Индекс Bloom filter.
Использование индексов Bitmap:
-- Создать индекс
CREATE INDEX <index_name> ON <mv_name>(<column_name>) USING BITMAP COMMENT '<comment>';
-- Проверить прогресс создания индекса
SHOW ALTER TABLE COLUMN;
-- Просмотреть индексы
SHOW INDEXES FROM <mv_name>;
-- Удалить индекс
DROP INDEX <index_name> ON <mv_name>;
Использование индексов BloomFilter:
-- Создать индекс
ALTER MATERIALIZED VIEW <mv_name> SET ("bloom_filter_columns" = "<col1,col2,col3,...>");
-- Просмотреть индексы
SHOW CREATE MATERIALIZED VIEW <mv_name>;
-- Удалить индекс
ALTER MATERIALIZED VIEW <mv_name> SET ("bloom_filter_columns" = "");
PROPERTIES (необязательный)
Свойства асинхронного материализованного представления. Вы можете изменить свойства существующего материализованного представления с помощью ALTER MATERIALIZED VIEW.
-
session.: Если вы хотите изменить свойство, связанное с переменной сеанса, материализованного представления, вы должны добавить префиксsession.к свойству, например,session.insert_timeout. Вам не нужно указывать префикс для свойств, не связанных с сеансом, например,mv_rewrite_staleness_second. -
replication_num: Количество реплик материализованного представления для создания. -
storage_medium: Тип носителя хранения. Допустимые значения:HDDиSSD. -
storage_cooldown_time: Время охлаждения хранилища для раздела. Если используются носители хранения HDD и SSD, данные в хранилище SSD перемещаются в хранилище HDD после времени, указанного этим свойством. Формат: "yyyy-MM-dd HH:mm:ss". Указанное время должно быть позже текущего времени. Если это свойство не указано явно, охлаждение хранилища не выполняется по умолчанию. -
bloom_filter_columns: Массив имен столбцов, которые включают индексацию Bloom filter. Подробности об индексах Bloom filter см. в разделе Индекс Bloom filter. -
partition_ttl: Время жизни (TTL) для разделов. Сохраняются разделы, данные которых находятся в пределах указанного временного диапазона. Просроченные разделы удаляются автоматически. Единица:YEAR,MONTH,DAY,HOURиMINUTE. Например, вы можете указать это свойство как2 MONTH. Это свойство рекомендуется вместоpartition_ttl_number. Оно поддерживается с версии v1.5.2. -
partition_ttl_number: Количество самых последних разделов материализованного представления для сохранения. Для разделов со временем начала, ранним, чем текущее время, после того, как количество этих разделов превысит это значение, менее недавние разделы будут удалены. Selena периодически проверяет разделы материализованного представления в соответствии с временным интервалом, указанным в элементе конфигурации FEdynamic_partition_check_interval_seconds, и автоматически удаляет просроченные разделы. Если вы включили стратегию динамического разделения, разделы, созданные заранее, не учитываются. Когда значение равно-1, все разделы материализованного представления будут сохранены. По умолчанию:-1. -
partition_refresh_number: В одном обновлении максимальное количество разделов для обновления. Если количество разделов для обновления превышает это значение, Selena разделит задачу обновления и завершит ее партиями. Только когда предыдущая партия разделов успешно обновлена, Selena продолжит обновлять следующую партию разделов, пока все разделы не будут обновлены. Если какой-либо из разделов не удастся обновить, последующие задачи обновления не будут созданы. Когда значение равно-1, задача обновления не будет разделена. Значение по умолчанию изменено с-1на1с версии v1.5.2, что означает, что Selena обновляет разделы один за другим. -
partition_refresh_strategy:Стратегия обновления для материализованного предста вления во время одной операции обновления. Когда установлено значениеadaptive, количество разделов для обновления будет автоматически определяться на основе объема данных в разделах базовой таблицы, что значительно повышает эффективность обновления. Если это свойство не указано, стратегия по умолчанию —strict, что означает, что количество разделов, обновленных за одну операцию, строго контролируетсяpartition_refresh_number. -
excluded_trigger_tables: Если базовая таблица материализованного представления указана здесь, задача автоматического обновления не будет запущена при изменении данных в базовой таблице. Этот параметр применяется только к стратегии обновления, вызванной загрузкой, и обычно используется вместе со свойствомauto_refresh_partitions_limit. Формат:[db_name.]table_name. Когда значение — пустая строка, любое изменение данных во всех базовых таблицах вызывает обновление соответствующего материализованного представления. Значение по умолчанию — пустая строка. -
excluded_refresh_tables: Базовые таблицы, перечисленные в этом свойстве, не будут обновлены в материализованное представление при изменении их данных. Формат:[db_name.]table_name. Значение по умолчанию — пустая строка. Когда значение — пустая строка, любое изменение данных базовой таблицы вызовет обновление соответствующего материализованного представления.подсказкаРазница между
excluded_trigger_tablesиexcluded_refresh_tables:excluded_trigger_tablesконтролирует, запускать ли обновление, а не участвовать ли в обновлении. Например, разделенное материализованное представление получается путем соединения двух разделенных таблиц A и B, и разделы двух таблиц A и B соответствуют один к одному.excluded_trigger_tableсодержит таблицу A. В течение периода времени таблица A обновила разделы[1,2,3], но поскольку этоexcluded_trigger_table, обновление материализованного представления не запускается. В это время таблица B обновляет раздел[3], и материализованное представление запускает обновление, которое обновит три раздела[1, 2, 3]. Здесь вы можете видеть, чтоexcluded_trigger_tableтолько контролирует, запускать ли обновление. Хотя обновление таблицы A не может запустить обновление материализованного представления, когда обновление таблицы B запускает обновление материализованного представления, раздел, обновленный таблицей A, также будет добавлен в задачу обновления.excluded_refresh_tablesконтролирует, участвовать ли в обновлении. В приведенном выше примере, если таблица A существует как вexcluded_trigger_table, так и вexcluded_refresh_tables, когда обновление таблицы B запускает обновление материализованного представления, будет обновлен только раздел[3].
-
auto_refresh_partitions_limit: Количество самых последних разделов материализованного представления, которые должны быть обновлены при запуске обновления материализованного представления. Вы можете использовать это свойство для ограничения диапазона обновления и снижения затрат на обновление. Однако, поскольку не все разделы обновляются, данные в материализованном представлении могут не соответствовать базовой таблице. По умолчанию:-1. Когда значение равно-1, все разделы будут обновлены. Когда значение является положительным целым числом N, Selena сортирует существующие разделы в хронологическом порядке и обновляет текущий раздел и N-1 самых последних разделов. Если количество разделов меньше N, Selena обновляет все существующие разделы. Если в вашем материализованном представлении есть динамические разделы, созданные заранее, Selena обновляет все предварительно созданные разделы. -
mv_rewrite_staleness_second: Если последнее обновление материализованного представления находится в пределах временного интервала, указанного в этом свойстве, это материализованное представление может использоваться непосредственно для переписывания запросов, независимо от того, изменяются ли данные в базовых таблицах. Если последнее обновление было до этого временного интервала, Selena проверяет, были ли обновлены базовые таблицы, чтобы определить, может ли материализованное представление использоваться для переписывания запросов. Единица: Секунда. Это свойство поддерживается с версии v1.5.2. -
colocate_with: Группа colocation асинхронного материализованного представления. См. Colocate Join для получения дополнительной информации. Это свойство поддерживается с версии v1.5.2. -
unique_constraintsиforeign_key_constraints: Ограничения Unique Key и ограничения Foreign Key при создании асинхронного материализованного представления для переписывания запросов в сценарии View Delta Join. См. Асинхронное материализованное представление - Переписывание запросов в сценарии View Delta Join для получения дополнительной информации. Это свойство поддерживается с версии v1.5.2. -
excluded_refresh_tables:Базовые таблицы, перечисленные в этом свойстве, не запускают обновление данных в материализованное представление при изменении их данных. Это свойство обычно используется вместе со свойствомexcluded_trigger_tables. Формат:[db_name.]table_name. Значение по умолчанию — пустая строка. Когда значение — пустая строка, любое изменение данных во всех базовых таблицах вызовет обновление соответствующего материализованного представления.ПРЕДУПРЕЖДЕНИЕ
Ограничения Unique Key и Foreign Key используются только для переписывания запросов. Проверки ограничений Foreign Key не гарантируются при загрузке данных в таблицу. Вы должны убедиться, что данные, загружаемые в таблицу, соответствуют ограничениям.
-
resource_group: Группа ресурсов, к которой принадлежат задачи обновления материализованного представления. Значение по умолчанию этого свойства —default_mv_wg, которая является системной группой ресурсов, специально используемой для обновления материализованных представлений.cpu_core_limitгруппыdefault_mv_wgравен1,mem_limitравен0.8. Для получения дополнительной информации о группах ресурсов см. Группа ресурсов. -
query_rewrite_consistency: Правило переписывания запросов для асинхронных материализованных представлений. Это свойство поддерживается с версии v1.5.2. Допустимые значения:-
disable: Отключить автоматическое переписывание запросов асинхронного материализованного представления. -
checked(Значение по умолчанию): Включить автоматическое переписывание запросов только тогда, когда материализованное представление соответствует требованию своевременности, что означает:- Если
mv_rewrite_staleness_secondне указан, материализованное представление может использоваться для переписывания запросов только тогда, когда его данные согласованы с данными во всех базовых таблицах. - Если
mv_rewrite_staleness_secondуказан, материализованное представление может использоваться для переписывания запросов, когда его последнее обновление находится в пределах временного интервала устаревания.
- Если
-
loose: Включить автоматическое переписывание запросов напрямую, и проверка согласованности не требуется. -
force_mv: Начиная с версии v1.5.2, материализованные представления Selena поддерживают TTL выражения общего раздела. Семантикаforce_mvспециально разработана для этого сценария. Когда эта семантика включена:- Если материализованное представление не имеет свойства
partition_retention_condition, оно всегда будет принудительно использовать материализованное представление для переписывания запросов, независимо от того, была ли обновлена базовая таблица. - Если материализованное представление имеет свойство
partition_retention_condition:- Для разделов в пределах диапазона TTL переписывание запросов на основе материализованного представления всегда доступно, независимо от того, была ли обновлена базовая таблица.
- Для разделов вне диапазона TTL требуется компенсация Union между материализованным представлением и базовой таблицей, независимо от того, была ли обновлена базовая таблица.
Например, если материализованное представление имеет определенное свойство
partition_retention_condition, и раздел для20241131истек, но данные базовой таблицы для20241203были обновлены, в то время как данные материализованного представления для20241203не были обновлены, применяется следующее, когда свойствоquery_rewrite_consistencyустановлено вforce_mv:- Материализованное представление гарантирует, что запросы к разделам в пределах диапазона TTL (например, с
20241201по20241203), определенного вpartition_retention_condition, всегда могут быть прозрачно переписаны. - Для запросов к разделам вне диапазона
partition_retention_conditionкомпенсация будет происходить автоматически на основе Union материализованного представления и базовой таблицы.
См. Пример 6 для подробных инструкций по семантике
force_mvиpartition_retention_condition. - Если материализованное представление не имеет свойства
-
-
storage_volume: Имя тома хранения, используемого для хранения асинхронного материализованного представления, которое вы хотите создать, если вы используете shared-data кластер. Это свойство поддерживается с версии v1.5.2. Если это свойство не указано, используется том хранения по умолчанию. Пример:"storage_volume" = "def_volume". -
force_external_table_query_rewrite: Включить ли переписывание запросов для материализованных представлений на основе внешнего каталога. Это свойство поддерживается с версии v1.5.2. Допустимые значения:true(Значение по умолчанию с версии v1.5.2): Включить переписывание запросов для материализованных представлений на основе внешнего катало га.false: Отключить переписывание запросов для материализованных представлений на основе внешнего каталога.
Поскольку строгая согласованность данных не гарантируется между базовыми таблицами и материализованными представлениями на основе внешнего каталога, эта функция по умолчанию установлена в
false. Когда эта функция включена, материализованное представление используется для переписывания запросов в соответствии с правилом, указанным вquery_rewrite_consistency. -
enable_query_rewrite: Использовать ли материализованное представление для переписывания запросов. Когда существует много материализованных представлений, переписывание запросов на основе материализованных представлений может повлиять на время, затрачиваемое оптимизатором. С помощью этого свойства вы можете контролировать, может ли материализованное представление использоваться для переписывания запросов. Эта функция поддерживается с версии v1.5.2. Допустимые значения:default(По умолчанию): Система не будет выполнять семантические проверки материализованного представления, но только мате риализованные представления типа SPJG могут использоваться для переписывания запросов. Обратите внимание, что если включено переписывание запросов на основе текста, материализованные представления не типа SPJG также могут использоваться для переписывания запросов.true: Система будет выполнять семантические проверки при создании или изменении материализованного представления. Если материализованное представление не подходит для переписывания запросов (то есть определение материализованного представления не является запросом типа SPJG), будет возвращен сбой.false: Материализованное представление не будет использоваться для переписывания запросов.
-
[Preview]
transparent_mv_rewrite_mode: Указывает режим прозрачного переписывания для запросов непосредственно к материализованному представлению. Эта функция поддерживается с версии v1.5.2. Допустимые значения:false(По умолчанию, совместимо с поведением в более ранних версиях): Запросы непосредственно к материализованному представлению не будут переписаны и возвращаются только с существующими данными в материализованном представлении. Их результаты запроса могут отличаться от результатов запросов, основанных на определении материализованного представления, в соответствии со статусом обновления (согласованность данных) материализованного представления.true: Запросы непосредственно к материализованному представлению будут переписаны и возвращены с самыми обновленными данными, которые согласуются с результатом запроса определения материализованного представления. Обратите внимание, что когда материализованное представление неактивно или не поддерживает прозрачное переписывание запросов, эти запросы будут выполняться как запрос определения материализованного представления.transparent_or_error: Запросы непосредственно к материализованному представлению будут переписаны, когда они подходят. Если материализованное представление неактивно или не поддерживает прозрачное переписывание запросов, эти запросы будут возвращены с ошибкой.transparent_or_defaultЗапросы непосредственно к материализованному представлению будут переписаны, когда они подходят. Если материализованное представление неактивно или не поддерживает прозрачное переписывание запросов, эти запросы будут возвращены с существующими данными в материализованном представлении.
-
partition_retention_condition: Начиная с версии v1.5.2, материализованные представления Selena поддерживают TTL выражения общего раздела. Это свойство — выражение, которое объявляет разделы, которые должны быть сохранены динамически. Разделы, которые не соответствуют условию в выражении, будут регулярно удаляться. Пример:'partition_retention_condition' = 'dt >= CURRENT_DATE() - INTERVAL 3 MONTH'.- Выражение может содержать только столбцы разделов и константы. Столбцы, не являющиеся разделами, не поддерживаются.
- Выражение общего раздела применяется к разделам List и Range по-разному:
- Для материализованных представлений с разделами List, Selena поддерживает удаление разделов, отфильтрованных выражением общего раздела.
- Для материализованных представлений с разделами Range, Selena может фильтровать и удалять разделы только с использованием возможности обрезки разделов FE. Разделы, соответствующие предикатам, которые не поддерживаются обрезкой разделов, не могут быть отфильтрованы и удалены.
См. Пример 6 для подробных инструкций по семантике
force_mvиpartition_retention_condition.
query_statement (обязательный)
Запрос для создания асинхронного материализованного представления. Начиная с версии v1.5.2, Selena поддерживает создание асинхронных материализованных представлений с Common Table Expression (CTE).
Запрос асинхронного материализованного представления
Асинхронное материализованное представление — это физическая таблица. Вы можете работать с ним как с любой обычной таблицей, за исключением того, что вы не можете напрямую загружать данные в асинхронное материализованное представление.