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

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.

Пример​

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;