Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Una vista materializada es una vista en la que los resultados precalculados están disponibles para su consulta y se pueden actualizar para reflejar cambios en la entrada. las vistas materializadas están respaldadas por una canalización. Cada vez que se actualiza una vista materializada, los resultados de la consulta se recalculan para reflejar los cambios en los conjuntos de datos ascendentes. Puede actualizar las vistas materializadas manualmente o según una programación.
Para más información sobre cómo realizar o programar actualizaciones, consulte Ejecución de una actualización de canalización.
Syntax
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 } } [...]
Parámetros
REFRESH
Si se especifica, creará la vista o actualizará una vista existente y su contenido.
PRIVADO
Crea una vista materializada privada. Una vista materializada privada puede ser útil como una tabla intermedia dentro de una canalización que no desea publicar en el catálogo.
- No se añaden al catálogo y solo son accesibles dentro del flujo de trabajo de definición.
- Pueden tener el mismo nombre que un objeto existente en el catálogo. Dentro de la canalización, si una vista materializada privada y un objeto del catálogo tienen el mismo nombre, las referencias al nombre se resolverán en la vista materializada privada.
- Las vistas materializadas privadas solo se conservan durante la duración de la canalización, no solo una sola actualización.
Las vistas materializadas privadas se crearon anteriormente con el
TEMPORARYparámetro .view_name
Nombre de la vista recién creada. El nombre completo de vista debe ser único.
Las vistas materializadas privadas pueden tener el mismo nombre que un objeto publicado en el catálogo.
lista_de_columnas
También puede etiquetar las columnas del resultado de la consulta de la vista. Si proporciona una lista de columnas, el número de alias de columna debe coincidir con el número de expresiones en la consulta. Si no se especificase ninguna lista de columnas, los alias se derivarán del cuerpo de la vista.
-
Los nombres de columna deben ser únicos y asignarse a las columnas de salida de la consulta.
tipo_de_columna
Especifica el tipo de datos de la columna. No todos los tipos de datos que admite Azure Databricks son compatibles con las vistas materializadas.
column_comment
Un literal de
STRINGopcional que describe la columna. Esta opción debe especificarse junto concolumn_type. Si no se especifica el tipo de columna, se omite el comentario de la columna.-
Agrega una restricción que valida los datos a medida que fluyen a la tabla. Consulte Administración de la calidad de los datos con las expectativas de canalización.
-
Importante
Esta característica está en versión preliminar pública.
Agrega una función de máscara de columna para anonimizar datos confidenciales. Consulte Filtros de fila y máscaras de columna.
-
restricción_de_tabla
Importante
Esta característica está en versión preliminar pública.
Al especificar un esquema, puede definir claves principales y externas. Las restricciones son informativas y no se aplican. Consulte la cláusula CONSTRAINT en la referencia del lenguaje SQL.
Nota:
Para definir restricciones en las tablas, tu canalización debe estar habilitada para el Unity Catalog.
view_clauses
Puede especificar opcionalmente particiones, comentarios y propiedades definidas por el usuario para la vista materializada. Cada subcláusula solo se puede especificar una vez.
USO DE DELTA
Especifica el formato de datos. La única opción es DELTA.
Esta cláusula es opcional y el valor predeterminado es DELTA.
PARTICIONADO POR
Lista opcional de una o varias columnas que se van a usar para crear particiones en la tabla. Mutuamente excluyente con
CLUSTER BY.La agrupación en clústeres líquidos proporciona una solución flexible y optimizada para la agrupación en clústeres. Considere la posibilidad de usar
CLUSTER BYen lugar dePARTITIONED BYpara canalizaciones.CLUSTER BY
Habilite la agrupación en clústeres líquidos en la tabla y defina las columnas que se usarán como claves de agrupación en clústeres. Use la agrupación automática en clústeres líquidos con
CLUSTER BY AUTOy Databricks elige de forma inteligente las claves de agrupación en clústeres para optimizar el rendimiento de las consultas. Mutuamente excluyente conPARTITIONED BY.Consulte Uso de clústeres líquidos para tablas.
UBICACIÓN
Ubicación de almacenamiento opcional para los datos de la tabla. Si no se establece, el sistema establecerá de manera predeterminada la ubicación de almacenamiento de la canalización.
Esta opción solo está disponible al publicar en metastore de Hive. En el catálogo de Unity, la ubicación se administra automáticamente.
COMENTARIO
Descripción opcional de la tabla.
TBLPROPERTIES
Lista opcional de propiedades de la tabla.
CONROW FILTER
Importante
Esta característica está en versión preliminar pública.
Agrega una función de filtro de fila a la tabla. Las consultas futuras de esa tabla reciben un subconjunto de las filas para las que la función se evalúa como TRUE. Esto resulta útil para el control de acceso específico, ya que permite a la función inspeccionar la identidad y las pertenencias a grupos del usuario que realiza la invocación para decidir si se filtran determinadas filas.
Consulte la cláusula
ROW FILTER.consulta
Consulta que define el conjunto de datos de la tabla.
Permisos necesarios
El usuario de ejecución para una canalización debe tener los permisos siguientes:
- Privilegio
SELECTen las tablas base a las que hace referencia la vista materializada. -
USE CATALOGprivilegios en el catálogo primario y el privilegioUSE SCHEMAen el esquema primario. - Privilegio
CREATE MATERIALIZED VIEWen el esquema de la vista materializada.
Para que los usuarios puedan actualizar la canalización en la que se define la vista materializada, necesitan:
-
USE CATALOGprivilegios en el catálogo primario y el privilegioUSE SCHEMAen el esquema primario. - Propiedad de la vista materializada o privilegio
REFRESHen la vista materializada. - El propietario de la vista materializada debe tener el
SELECTprivilegio sobre las tablas base a las que hace referencia la vista materializada.
Para que un usuario pueda consultar la vista materializada resultante, necesita:
-
USE CATALOGprivilegios en el catálogo primario y el privilegioUSE SCHEMAen el esquema primario. - Privilegio
SELECTsobre la vista materializada.
Limitaciones
- Cuando en una vista materializada con un
sumagregado sobre una columna que puede contener valores NULL se elimine el último valor no NULL de esa columna y, por tanto, solo quedenNULLvalores en esa columna: el valor agregado resultante de la vista materializada devolverá cero en lugar deNULL. - La referencia de columna no requiere un alias. Las expresiones de referencia que no sean de columna requieren un alias, como en el ejemplo siguiente:
- Permitido:
SELECT col1, SUM(col2) AS sum_col2 FROM t GROUP BY col1 - No permitido:
SELECT col1, SUM(col2) FROM t GROUP BY col1
- Permitido:
-
NOT NULLdebe especificarse manualmente junto conPRIMARY KEYpara que sea una instrucción válida. - Las vistas materializadas no admiten columnas de identidad ni claves suplentes.
- Las vistas materializadas no admiten comandos
OPTIMIZEyVACUUM. El mantenimiento se produce automáticamente. - No se admite el cambio de nombre de la tabla ni el cambio del propietario.
- No se admiten columnas generadas, columnas de identidad y columnas predeterminadas.
Examples
-- 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