CREATE SYNC MATERIALIZED VIEW
Описание
Оператор создания синхронного материализованного представления.
Синтаксис
CREATE MATERIALIZED VIEW <materialized_view_name> [AS] <query>
Где
query
:
SELECT <select_expr> select_expr[, select_expr ...]
FROM <base_table>
WHERE condition
GROUP BY <column_name>[, <column_name> ...]
ORDER BY <column_name>[, <column_name> ...]
Обязательные параметры
1. <materialized_view_name>
Задаёт идентификатор (то есть имя) материализованного представления. Поскольку синхронное материализованное представление создаётся на основе таблицы, его имя должно быть уникальным в пределах этой таблицы.
Идентификатор должен начинаться с буквы (если включена поддержка имён Unicode, это может быть символ любого языка) и не может содержать пробелы или специальные символы, если только вся строка идентификатора не заключена в обратные кавычки (например,
My Object).Идентификатор не может быть зарезервированным ключевым словом.
Подробнее см. требования к идентификаторам и зарезервированным ключевым словам.
2. <query>
Запрос, используемый для построения материализованного представления. Результат этого запроса составляет данные материализованного представления. В настоящее время поддерживается следующий формат запроса:
Синтаксис соответствует синтаксису оператора запроса.
select_expr: все столбцы в схеме материализованного представления.
- Должен включать хотя бы один отдельный столбец.
base_table: имя базовой таблицы материализованного представления. Обязательный элемент.
- Должна быть указана одна таблица, а не подзапрос.
where: условие фильтрации материализованного представления. Необязательный элемент.
- Если не указано, данные не фильтруются.
group by: столбцы группировки материализованного представления. Необязательный элемент.
- Если не указаны, данные не группируются.
order by: столбцы сортировки материализованного представления. Необязательный элемент.
- Порядок объявления столбцов сортировки должен соответствовать порядку столбцов, объявленных в
select_expr.- Если
order byне указан, столбцы сортировки добавляются автоматически по следующим правилам. Если материализованное представление имеет агрегатный тип, все столбцы группировки автоматически добавляются в качестве столбцов сортировки. Если материализованное представление имеет неагрегатный тип, в качестве столбцов сортировки автоматически добавляются первые 36 байт.- Если количество автоматически добавленных столбцов сортировки меньше 3, в качестве столбцов сортировки используются первые три столбца. Если запрос содержит столбцы группировки, столбцы сортировки должны соответствовать столбцам группировки.
Требования к правам доступа
| Привилегия | Объект | Примечания |
|---|---|---|
| ALTER_PRIV | Таблица | Требуется право ALTER_PRIV на базовую таблицу текущего материализованного представления |
Примечания
- Имена столбцов в списке SELECT синхронного материализованного представления не должны совпадать с именами существующих столбцов базовой таблицы или с именами столбцов других синхронных материализованных представлений на той же базовой таблице. Чтобы избежать конфликтов имён, можно задать псевдонимы (например, col as xxx).
- Синхронные материализованные представления поддерживают только операторы SELECT для одной таблицы. Поддерживаются предложения WHERE, GROUP BY и ORDER BY, но не JOIN, HAVING, LIMIT или LATERAL VIEW.
- Список SELECT не может содержать столбцы с автоинкрементом, константы, повторяющиеся выражения или оконные функции.
- Если список SELECT содержит агрегатные функции, они должны быть корневыми выражениями (например,
sum(a + 1)поддерживается, аsum(a) + 1не поддерживается). После агрегатных функций не могут следовать другие выражения, не являющиеся агрегатными функциями (например,SELECT x, sum(a)допустимо, аSELECT sum(a), xнедопустимо). - Слишком большое количество материализованных представлений на одной таблице может снизить эффективность импорта данных: при импорте данные материализованных представлений и базовой таблицы обновляются синхронно. Если у таблицы слишком много материализованных представлений, импорт может замедлиться, как при одновременном импорте данных в несколько таблиц в рамках одной операции.
- Если материализованное представление создаётся для модели данных Unique Key, оно может только изменять порядок столбцов и не может выполнять агрегацию. Поэтому в модели Unique Key нельзя агрегировать данные до более крупного уровня детализации путём создания материализованных представлений.
- Если материализованное представление создаётся для модели данных Unique Key или Aggregate Key и содержит предложение WHERE, в нём можно использовать только столбцы Key, но не столбцы Value.
Пример
Подготовка: в примере ниже используется стандартная базовая таблица TPC-H lineitem:
CREATE TABLE IF NOT EXISTS lineitem (
l_orderkey INT NOT NULL,
l_partkey INT NOT NULL,
l_suppkey INT NOT NULL,
l_linenumber INT NOT NULL,
l_quantity DECIMAL(15,2) NOT NULL,
l_extendedprice DECIMAL(15,2) NOT NULL,
l_discount DECIMAL(15,2) NOT NULL,
l_tax DECIMAL(15,2) NOT NULL,
l_returnflag CHAR(1) NOT NULL,
l_linestatus CHAR(1) NOT NULL,
l_shipdate DATE NOT NULL,
l_commitdate DATE NOT NULL,
l_receiptdate DATE NOT NULL,
l_shipinstruct CHAR(25) NOT NULL,
l_shipmode CHAR(10) NOT NULL,
l_comment VARCHAR(44) NOT NULL
)
DUPLICATE KEY (l_orderkey, l_partkey, l_suppkey, l_linenumber)
DISTRIBUTED BY HASH (l_orderkey) BUCKETS 1
PROPERTIES ("replication_num" = "1");
desc lineitem;
+-----------------+---------------+------+-------+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+---------------+------+-------+---------+-------+
| l_orderkey | int | No | true | NULL | |
| l_partkey | int | No | true | NULL | |
| l_suppkey | int | No | true | NULL | |
| l_linenumber | int | No | true | NULL | |
| l_quantity | decimal(15,2) | No | false | NULL | NONE |
| l_extendedprice | decimal(15,2) | No | false | NULL | NONE |
| l_discount | decimal(15,2) | No | false | NULL | NONE |
| l_tax | decimal(15,2) | No | false | NULL | NONE |
| l_returnflag | char(1) | No | false | NULL | NONE |
| l_linestatus | char(1) | No | false | NULL | NONE |
| l_shipdate | date | No | false | NULL | NONE |
| l_commitdate | date | No | false | NULL | NONE |
| l_receiptdate | date | No | false | NULL | NONE |
| l_shipinstruct | char(25) | No | false | NULL | NONE |
| l_shipmode | char(10) | No | false | NULL | NONE |
| l_comment | varchar(44) | No | false | NULL | NONE |
+-----------------+---------------+------+-------+---------+-------+
CREATE MATERIALIZED VIEW sync_agg_mv AS
SELECT
l_shipdate as shipdate,
l_partkey as partkey,
count(*),
sum(l_discount)
FROM
lineitem
GROUP BY
l_shipdate,
l_partkey;