Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
материализованное представление — это представление, в котором предварительно вычисляемые результаты доступны для запроса и могут быть обновлены для отражения изменений в входных данных. материализованные представления поддерживаются конвейером. Каждый раз при обновлении материализованного представления результаты запроса пересчитываются для отражения изменений в вышестоящих наборах данных. Вы можете обновлять материализованные представления вручную или по расписанию.
Дополнительные сведения о выполнении или планировании обновлений см. в статье "Запуск обновления конвейера".
Синтаксис
CREATE [OR REFRESH] [PRIVATE] MATERIALIZED VIEW
view_name
[ column_list ]
[ view_clauses ]
AS query
column_list
( { column_name column_type column_properties } [, ...]
[ column_constraint ] [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
view_clauses
{ USING DELTA |
PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT view_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [...]
Параметры
REFRESH
При указании создадите представление или обновите существующее представление и его содержимое.
ЧАСТНЫЙ
Создает частное материализованное представление. Частное материализованное представление может быть полезно в качестве промежуточной таблицы в конвейере, который не требуется опубликовать в каталоге.
- Они не добавляются в каталог и доступны только в определяемом конвейере.
- Они могут иметь то же имя, что и существующий объект в каталоге. В конвейере, если частное материализованное представление и объект в каталоге имеют то же имя, ссылки на имя разрешаются в частное материализованное представление.
- Частные материализованные представления сохраняются только в течение всего времени существования конвейера, а не только одного обновления.
Частные материализованные представления были ранее созданы с параметром
TEMPORARY.view_name
Имя созданного представления. Полностью квалифицированное имя представления должно быть уникальным.
Частные материализованные представления могут иметь то же имя, что и объект, опубликованный в каталоге.
column_list
При необходимости задаёт метки для столбцов в результатах запроса представления. Если указан список столбцов, количество псевдонимов столбцов должно соответствовать количеству выражений в запросе. Если список столбцов не указан, псевдонимы являются производными от текста представления.
-
Имена столбцов должны быть уникальными и сопоставляться с выходными столбцами запроса.
тип_столбца
Указывает тип данных столбца. Не все типы данных, поддерживаемые Azure Databricks, поддерживаются материализованными представлениями.
column_comment
Необязательное литеральное значение
STRING, описывающее столбец. Этот параметр должен быть указан вместе сcolumn_type. Если тип столбца не указан, комментарий столбца пропускается.-
Добавляет ограничение, которое проверяет данные по мере их поступления в таблицу. См. Управление качеством данных, используя ожидания конвейера.
-
Это важно
Эта функция доступна в общедоступной предварительной версии.
Добавляет функцию маски столбца для анонимизации конфиденциальных данных. См. фильтры строк и маски столбцов.
-
ограничение_таблицы
Это важно
Эта функция доступна в общедоступной предварительной версии.
При указании схемы можно определить первичные и внешние ключи. Ограничения являются информационными и не применяются. См. пункт CONSTRAINT в справочной информации по языку SQL.
Замечание
Чтобы определить ограничения таблицы, конвейер должен поддерживать Unity Catalog.
view_clauses
При необходимости укажите секционирование, комментарии и пользовательские свойства для материализованного представления. Каждый подпункт может быть указан только один раз.
ИСПОЛЬЗОВАНИЕ DELTA
Задает формат данных. Единственным вариантом является DELTA.
Это предложение является необязательным и по умолчанию используется delta.
РАЗДЕЛЁННО ПО
Необязательный список одного или нескольких столбцов, используемых для секционирования в таблице. Взаимоисключающ с
CLUSTER BY.Liquid Clustering предоставляет гибкое и оптимизированное решение для кластеризации. Рекомендуется использовать
CLUSTER BYвместоPARTITIONED BYдля конвейеров.CLUSTER BY
Включите кластеризацию жидкости в таблице и определите столбцы, используемые в качестве ключей кластеризации. Используйте автоматическую кластеризацию с
CLUSTER BY AUTO, и Databricks интеллектуально выбирает ключи кластеризации для оптимизации производительности запросов. Взаимоисключающ сPARTITIONED BY.См. раздел "Использование кластеризации жидкости" для таблиц.
МЕСТОПОЛОЖЕНИЕ
Необязательное расположение хранилища для данных таблицы. Если не задано, система по умолчанию выберет местоположение для хранения конвейера.
Этот параметр доступен только при публикации в хранилище метаданных Hive. В каталоге Unity расположение управляется автоматически.
КОММЕНТАРИЙ
Необязательное описание таблицы.
TBLPROPERTIES
Необязательный список свойств таблицы.
С ROW FILTER
Это важно
Эта функция доступна в общедоступной предварительной версии.
Добавляет функцию фильтра строк в таблицу. Будущие запросы для этой таблицы получают подмножество строк, для которых функция оценивается как TRUE. Это полезно для точного управления доступом, так как это позволяет функции проверять личность и членства в группах вызывающего пользователя, чтобы решить, следует ли фильтровать определенные строки.
См.
ROW FILTERпункт.query
Запрос, определяющий набор данных для таблицы.
Необходимые разрешения
Пользователь с правами выполнения для конвейера должен иметь следующие разрешения:
-
SELECTпривилегия над базовыми таблицами, на которые ссылается материализованное представление. -
USE CATALOGпривилегия в отношении родительского каталога и привилегияUSE SCHEMAв отношении родительской схемы. -
CREATE MATERIALIZED VIEWпривилегии на схему материализованного представления.
Чтобы пользователь мог обновить конвейер, в котором определено материализованное представление, необходимо:
-
USE CATALOGпривилегия в отношении родительского каталога и привилегияUSE SCHEMAв отношении родительской схемы. - Право собственности на материализованное представление или
REFRESHпривилегия на материализованное представление. - Владелец материализованного представления должен иметь
SELECTпривилегии над базовыми таблицами, на которые ссылается материализованное представление.
Чтобы пользователь мог запрашивать полученное материализованное представление, им требуется:
-
USE CATALOGпривилегия в отношении родительского каталога и привилегияUSE SCHEMAв отношении родительской схемы. -
SELECTпривилегии над материализованным представлением.
Ограничения
- Если материализованное представление с агрегатом
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 by reading from an external data source, using the default schema:
CREATE OR REFRESH MATERIALIZED VIEW taxi_raw
AS SELECT * FROM read_files("/databricks-datasets/nyctaxi/sample/json/")
-- Create a materialized view by reading from a dataset defined in a pipeline:
CREATE OR REFRESH MATERIALIZED VIEW filtered_data
AS SELECT
...
FROM taxi_raw
-- Specify a schema and clustering columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) CLUSTER BY (order_day_of_week, customer_id)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify partition columns for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
) PARTITIONED BY (order_day_of_week)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a primary and foreign key constraint for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales
(customer_id STRING NOT NULL PRIMARY KEY,
customer_name STRING,
number_of_line_items STRING,
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime)),
CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES main.default.customers(customer_id)
)
COMMENT "Raw data on sales"
AS SELECT * FROM ...
-- Specify a row filter and mask clause for a table:
CREATE OR REFRESH MATERIALIZED VIEW sales (
customer_id STRING MASK catalog.schema.customer_id_mask_fn,
customer_name STRING,
number_of_line_items STRING COMMENT 'Number of items in the order',
order_datetime STRING,
order_number LONG,
order_day_of_week STRING GENERATED ALWAYS AS (dayofweek(order_datetime))
)
COMMENT "Raw data on sales"
WITH ROW FILTER catalog.schema.order_number_filter_fn ON (order_number)
AS SELECT * FROM sales_bronze