CREATE MATERIALIZED VIEW
Область применения: Databricks SQL
материализованное представление — это представление, в котором предварительно вычисляемые результаты доступны для запроса и могут быть обновлены для отражения изменений в входных данных. Каждый раз при обновлении материализованного представления результаты запроса пересчитываются для отражения изменений в восходящих наборах данных. Все материализованные представления поддерживаются конвейером DLT. Вы можете обновить материализованные представления вручную или по расписанию.
Дополнительные сведения о том, как выполнить обновление вручную, см. в REFRESH (MATERIALIZED VIEW или STREAMING TABLE).
Дополнительные сведения о том, как запланировать обновление, см. в разделе Примеры или в разделе ALTER MATERIALIZED VIEW.
Материализованные представления можно создавать только с помощью хранилища Pro, бессерверного SQL-хранилища или в конвейере Delta Live Tables.
Примечание.
Операции создания и обновления материализованных представлений и потоковых таблиц выполняются с помощью конвейера Delta Live Tables без серверов. Обозреватель каталогов можно использовать для просмотра сведений о резервных конвейерах в пользовательском интерфейсе. См. Что такое обозреватель каталогов.
Синтаксис
{ CREATE OR REPLACE MATERIALIZED VIEW | CREATE MATERIALIZED VIEW [ IF NOT EXISTS ] }
view_name
[ column_list ]
[ view_clauses ]
[schedule_clause]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ , table_constraint ] [...])
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ PARTITIONED BY (col [, ...]) |
COMMENT view_comment |
TBLPROPERTIES clause |
SCHEDULE [ REFRESH ] schedule_clause |
WITH { ROW FILTER clause } } [...]
schedule_clause
{ EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS } |
CRON cron_string [ AT TIME ZONE timezone_id ] }
Параметры
REPLACE
Если задано, замените представление и его содержимое, если оно уже существует.
IF NOT EXISTS
Создает представление, если оно не существует. Если представление по этому имени уже существует,
CREATE MATERIALIZED VIEW
оператор игнорируется.Можно указать не более одного предложения из числа
IF NOT EXISTS
иOR REPLACE
.-
Имя созданного представления. Полное имя представления должно быть уникальным.
column_list
При необходимости задаёт метки для столбцов в результатах запроса представления. Если указан список столбцов, количество псевдонимов столбцов должно соответствовать количеству выражений в запросе. Если список столбцов не указан, псевдонимы являются производными от текста представления.
-
Имена столбцов должны быть уникальными и сопоставляться с выходными столбцами запроса.
column_type
Указывает тип данных столбца. Не все типы данных, поддерживаемые Azure Databricks, поддерживаются материализованными представлениями.
column_comment
Необязательный
STRING
литерал, описывающий столбец. Этот параметр должен быть указан вместе сcolumn_type
. Если тип столбца не указан, комментарий столбца пропускается.column_constraint
Добавляет ограничение на информационный первичный ключ или информационный внешний ключ в столбец в материализованном представлении. Если тип столбца не указан, ограничение столбца пропускается.
-
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
Добавляет функцию маски столбца для анонимизации конфиденциальных данных. Все последующие запросы из этого столбца получают результат оценки этой функции по столбцу вместо исходного значения столбца. Это может быть полезно для точного контроля доступа, когда функция может проверить идентификацию или членство в группах вызывающего пользователя, чтобы определить, следует ли скрыть это значение. Если тип столбца не указан, маска столбца пропускается.
-
table_constraint
Добавляет основное информационное ограничение или внешнее информационное ограничение в таблицу в материализованном представлении. Если тип столбца не указан, ограничение таблицы пропускается.
view_clauses
При необходимости укажите секционирование, комментарии, пользовательские свойства и расписание обновления для нового материализованного представления. Каждое вложенное предложение может быть указано только один раз.
-
Необязательный список столбцов таблицы для секционирования таблицы по.
КОММЕНТАРИЙ view_comment
Литерал
STRING
для описания таблицы.-
При необходимости задает одно или несколько свойств, определяемых пользователем.
Используйте этот параметр, чтобы указать канал среды выполнения Delta Live Tables, используемый для выполнения этой инструкции. Задайте для свойства
pipelines.channel
значение"PREVIEW"
или"CURRENT"
. Значение по умолчанию —"CURRENT"
. Дополнительные сведения о каналах Delta Live Tables см. в каналах среды выполнения Delta Live Tables. РАСПИСАНИЕ [ REFRESH ] пункт_расписания
EVERY number { HOUR | HOURS | DAY | DAYS | WEEK | WEEKS }
Чтобы запланировать периодические обновления, используйте синтаксис
EVERY
. Если указан синтаксисEVERY
, то потоковая таблица или материализованное представление периодически обновляется с заданным интервалом на основе указанного значения, напримерHOUR
,HOURS
,DAY
,DAYS
,WEEK
илиWEEKS
. В следующей таблице перечислены принятые целые значения дляnumber
.Time unit Целое значение HOUR or HOURS
1 <= H <= 72 DAY or DAYS
1 <= D <= 31 WEEK or WEEKS
1 <= W <= 8 Примечание.
Семантические и множественные формы включенной единицы времени семантики.
CRON cron_string [ AT TIME ZONE timezone_id ]
Чтобы запланировать обновление, используя значение кварцевого cron: . Допустимые time_zone_values принимаются. Функция
AT TIME ZONE LOCAL
не поддерживается.Если
AT TIME ZONE
нет, используется часовой пояс сеанса. ЕслиAT TIME ZONE
отсутствует, а часовой пояс сеанса не задан, возникает ошибка.SCHEDULE
семантически эквивалентенSCHEDULE REFRESH
.
-
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
Добавляет функцию фильтра строк в таблицу. Все последующие запросы из этой таблицы получают подмножество строк, для которых функция принимает булево значение TRUE. Это может быть полезно для точного контроля доступа, где функция может проверить удостоверение или членство в группах вызывающего пользователя, чтобы определить, следует ли фильтровать определенные строки.
-
AS query
Запрос, который создает представление из базовых таблиц или других представлений.
Необходимые разрешения
Пользователь, создающий материализованное представление (MV), является владельцем MV и должен иметь следующие разрешения:
-
SELECT
привилегии на управление базовыми таблицами, на которые ссылается MV. -
USE CATALOG
привилегия в отношении родительского каталога и привилегияUSE SCHEMA
в отношении родительской схемы. -
CREATE MATERIALIZED VIEW
привилегии схемы для MV.
Для того чтобы пользователь мог обновить MV, им требуется:
-
USE CATALOG
привилегия на родительский каталог и привилегияUSE SCHEMA
на родительскую схему. - Владение MV или
REFRESH
привилегией на MV. - Владелец MV должен иметь привилегию
SELECT
на управление базовыми таблицами, на которые ссылается MV.
Для того чтобы пользователь мог запрашивать MV, им требуется:
-
USE CATALOG
привилегия родительского каталога и привилегияUSE SCHEMA
родительской схемы. -
SELECT
привилегии над материализованным представлением.
Фильтры строк и маски столбцов
Внимание
Эта функция предоставляется в режиме общедоступной предварительной версии.
Фильтры строк позволяют указать функцию, которая применяется в качестве фильтра всякий раз, когда таблица сканирует строки. Эти фильтры гарантируют, что последующие запросы возвращают только строки, для которых предикат фильтра оценивается как true.
Маски столбцов позволяют маскировать значения столбца всякий раз, когда таблица сканирует строки. Все будущие запросы, связанные с этим столбцом, получат результат оценки функции по столбцу, заменив исходное значение столбца.
Дополнительные сведения о том, как использовать фильтры строк и маски столбцов, см. в разделе Фильтрация конфиденциальных данных таблицы с помощью фильтров строк и маски столбцов.
Управление фильтрами строк и масками столбцов
Фильтры строк и маски столбцов для материализованных представлений должны быть добавлены с помощью инструкции CREATE
.
Поведение
-
Обновить как определяющего: когда инструкция
REFRESH MATERIALIZED VIEW
обновляет материализованное представление, функции фильтрации строк выполняются с правами определителя (как владелец таблицы). Это означает, что обновление таблицы использует контекст безопасности пользователя, создавшего материализованное представление. -
Запрос. Хотя большинство фильтров выполняются с правами определителя, функции, которые проверяют контекст пользователя (например
CURRENT_USER
, иIS_MEMBER
) являются исключениями. Эти функции выполняются в качестве вызывающего средства. Этот подход применяет элементы управления безопасностью и доступом для определенных пользователей на основе контекста текущего пользователя. - При создании материализованных представлений по исходным таблицам, содержащим фильтры строк и маски столбцов, обновление материализованного представления всегда является полным обновлением. Полное обновление повторно обрабатывает все данные, доступные в источнике с помощью последних определений. Это гарантирует, что политики безопасности в исходных таблицах оцениваются и применяются с наиболее up-toданных и определений даты.
Наблюдаемость
Используйте DESCRIBE EXTENDED
, INFORMATION_SCHEMA
или обозреватель каталогов, чтобы проверить существующие фильтры строк и маски столбцов, применяемые к заданному материализованному представлению. Эта функция позволяет пользователям проводить аудит и анализировать меры защиты и доступа к данным в материализованных представлениях.
Ограничения
- Если в материализованном представлении с агрегацией
sum
по столбцу, допускающему значения NULL, удалено последнее ненулевое значение из этого столбца, и таким образом в нём остаются только значенияNULL
, то итоговое агрегатное значение материализованного представления возвращает нуль вместоNULL
. - Ссылка на столбец не требует псевдонима. Для ссылочных выражений, отличных от столбцов, требуется псевдоним, как показано в следующем примере:
- Дозволенный:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1
- Запрещено:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Дозволенный:
-
NOT NULL
необходимо вручную указать вместе сPRIMARY KEY
тем, чтобы быть допустимым оператором. - Материализованные представления не поддерживают столбцы идентичности или суррогатные ключи.
- Материализованные представления не поддерживают команды
OPTIMIZE
иVACUUM
. Обслуживание происходит автоматически. - Материализованные представления не поддерживают ожидания для определения ограничений качества данных.
Примеры
-- Create a materialized view if it doesn't exist
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create and schedule a materialized view to be refreshed every day.
-- Note: All columns in a GROUP BY need to be explicitly aliased
> CREATE MATERIALIZED VIEW daily_sales
COMMENT 'Daily sales numbers'
SCHEDULE EVERY 1 DAY
AS SELECT date AS date, sum(sales) AS sumOfSales
FROM table1
GROUP BY date;
-- Sets the runtime channel to "PREVIEW"
> CREATE MATERIALIZED VIEW mv_preview
TBLPROPERTIES(pipelines.channel = "PREVIEW")
AS SELECT * FROM RANGE(10)
-- Create a materialized view with a table constraint
> CREATE MATERIALIZED VIEW IF NOT EXISTS subscribed_movies(
member_id int NOT NULL,
full_name string,
movie_title string,
CONSTRAINT movie_pk PRIMARY KEY(member_id)
)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create or replace the materialized view to remove the table constraint and add a partition
> CREATE OR REPLACE MATERIALIZED VIEW subscribed_movies
PARTITIONED BY (member_id)
AS SELECT mo.member_id, mb.full_name, mo.movie_title
FROM movies AS mo INNER JOIN members AS mb ON mo.member_id = mb.id;
-- Create a materialized view with a row filter and a column mask
> CREATE MATERIALIZED VIEW masked_view (
id int,
name string,
region string,
ssn string MASK catalog.schema.ssn_mask_fn
)
WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
AS SELECT id, name, region, ssn
FROM employees;