Uso de vistas materializadas en Databricks SQL
Nota:
Si necesita usar una conexión de Azure Private Link con la vista materializada, póngase en contacto con el representante de Databricks.
En este artículo se describe cómo crear y usar vistas materializadas en Databricks SQL para mejorar el rendimiento y reducir el costo de las cargas de trabajo de procesamiento y análisis de datos.
¿Qué son las vistas materializadas?
En Databricks SQL, las vistas materializadas son tablas administradas por Unity Catalog que permiten a los usuarios calcular previamente los resultados en función de la versión más reciente de los datos en las tablas de origen. Las vistas materializadas en Azure Databricks difieren de otras implementaciones, ya que los resultados devueltos reflejan el estado de los datos cuando la vista materializada se actualizó por última vez en lugar de actualizar siempre los resultados cuando se consulta la vista materializada. Puede actualizar manualmente las vistas materializadas o programar actualizaciones.
Las vistas materializadas son eficaces para cargas de trabajo de procesamiento de datos, como el procesamiento de extracción, transformación y carga (ETL). Las vistas materializadas proporcionan una manera simple y declarativa de procesar datos de cumplimiento, correcciones, agregaciones o captura de datos modificados (CDC) generales. Las vistas materializadas reducen el costo y mejoran la latencia de las consultas mediante el cálculo previo de consultas lentas y cálculos usados con frecuencia. Las vistas materializadas también permiten transformaciones fáciles de usar mediante la limpieza, el enriquecimiento y la desnormalización de las tablas base. Las vistas materializadas pueden reducir los costos al proporcionar una experiencia simplificada para el usuario final porque, en algunos casos, pueden calcular de manera incremental los cambios de las tablas base.
Las vistas materializadas se admitieron por primera vez en Azure Databricks con el lanzamiento de Delta Live Tables. Al crear una vista materializada en una instancia de Databricks SQL Warehouse, se crea una canalización sin servidor para procesar las actualizaciones en la vista materializada. Puede supervisar el estado de las operaciones de actualización en la interfaz de usuario de Delta Live Tables o en la API de canalizaciones. Consulte Visualización del estado de una actualización de vista materializada.
Requisitos
Para crear o actualizar vistas materializadas:
Debe usar un almacén de SQL pro habilitada para el Unity Catalog o sin servidor.
Para actualizar una vista materializada, debe estar en el área de trabajo que la creó.
El área de trabajo debe estar en una región que admita almacenes SQL sin servidor.
Para consultar las vistas materializadas:
- Debe ser el propietario de la vista materializada o tener
SELECT
en la vista materializada, junto conUSE SCHEMA
yUSE CATALOG
en sus elementos primarios. - Debe usar uno de los siguientes recursos de proceso:
- Almacén de SQL
- Interfaces de Delta Live Tables
- Proceso del modo de acceso compartido
- Modo de acceso de usuario único en Databricks Runtime 15.4 y versiones posteriores, siempre y cuando el área de trabajo esté habilitada para el proceso sin servidor. Consulte Control de acceso específico sobre el proceso de un solo usuario.
- Solo si es el propietario de la vista materializada: un único recurso de proceso en modo de acceso de usuario que ejecuta Databricks Runtime entre 14.3 y 15.3.
Para obtener información sobre otras restricciones al usar vistas materializadas, consulte Limitaciones.
Creación de una vista materializada
Las operaciones CREATE
de la vista materializada de Databricks SQL usan un almacén de Databricks SQL para crear y cargar datos en la vista materializada. Crear una vista materializada es una operación sincrónica, lo que significa que el comando CREATE MATERIALIZED VIEW
se bloquea hasta que se crea la vista materializada y finaliza la carga de datos inicial. Se crea automáticamente una canalización de Delta Live Tables sin servidor para cada vista materializada de Databricks SQL. Cuando se actualiza la vista materializada, la canalización de Delta Live Tables procesa la actualización.
Para crear una vista materializada, use la instrucción CREATE MATERIALIZED VIEW
. Para enviar una instrucción create, use el editor de SQL en la interfaz de usuario de Azure Databricks, la CLI de Databricks SQL o la API de Databricks SQL.
Puede seleccionar el canal en tiempo de ejecución donde se ejecuta la instrucción create mediante la TBLPROPERTIES
cláusula con el valor establecido "PREVIEW"
en o "CURRENT"
. El valor predeterminado es "CURRENT"
. Para obtener más información sobre los canales de Delta Live Tables, consulte Canales en tiempo de ejecución de Delta Live Tables. Para obtener más información sobre la sintaxis y los parámetros, consulte CREAR VISTA MATERIALIZADA.
Nota:
El usuario que crea una vista materializada es el propietario de la vista materializada y debe tener los siguientes permisos:
- Privilegio
SELECT
en las tablas base a las que hace referencia la vista materializada. - Privilegios
USE CATALOG
yUSE SCHEMA
en el catálogo y el esquema que contiene las tablas de origen para la vista materializada. - Privilegios
USE CATALOG
yUSE SCHEMA
en el esquema y catálogo de destino de la vista materializada. - Privilegios
CREATE TABLE
yCREATE MATERIALIZED VIEW
en el esquema que contiene la vista materializada.
En el ejemplo siguiente se crea la vista materializada mv1
a partir de la tabla base base_table1
:
CREATE MATERIALIZED VIEW mv1
AS SELECT
date, sum(sales) AS sum_of_sales
FROM
base_table1
GROUP BY
date;
Carga de datos desde sistemas externos
Databricks recomienda cargar datos externos mediante la federación de Lakehouse para orígenes de datos admitidos. Para obtener información acerca de cómo cargar datos de orígenes no compatibles con la federación de Lakehouse, consulte Opciones de formato de datos.
Actualización de una vista materializada
La operación REFRESH
actualiza la vista materializada para reflejar los cambios más recientes en la tabla base. La operación es sincrónica de manera predeterminada, lo que significa que el comando se bloquea hasta que se completa la operación de actualización. Para actualizar una vista materializada, use la instrucción REFRESH MATERIALIZED VIEW
. Consulte ACTUALIZACIÓN (VISTA MATERIALIZADA o TABLA DE STREAMING) para obtener más información sobre la sintaxis y los parámetros de SQL para este comando. Para obtener más información sobre los tipos de vistas materializadas que se pueden actualizar incrementalmente, consulte Actualización incremental para vistas materializadas.
Para enviar una instrucción de actualización, use el editor de SQL en la interfaz de usuario de Azure Databricks, un cuaderno adjunto al almacén de SQL, la CLI de Databricks SQL o la API de Databricks SQL.
Solo el propietario puede REFRESH
la vista materializada.
En el ejemplo siguiente se actualiza la vista materializada mv1
:
REFRESH MATERIALIZED VIEW mv1;
¿Cómo se actualizan las vistas materializadas de Databricks SQL?
Las vistas materializadas crean y usan automáticamente canalizaciones de Delta Live Tables sin servidor para procesar las operaciones de actualización. La canalización Delta Live Tables administra la actualización y el almacén de Databricks SQL supervisa la actualización para crear la vista materializada. Las vistas materializadas se pueden actualizar mediante una canalización de Delta Live Tables que se ejecuta según una programación. Consulte Modo desencadenado frente a canalización continua.
Nota:
El runtime de Delta Live Tables no puede detectar cambios en orígenes de datos que no son delta. La tabla se sigue actualizando con regularidad, pero con un intervalo de desencadenador predeterminado mayor, para evitar que un recálculo excesivo ralentice cualquier procesamiento incremental que se produzca durante el proceso.
De forma predeterminada, las operaciones de actualización se realizan de forma sincrónica. También puede configurar que una operación de actualización se produzca de forma asincrónica. Esto se puede establecer mediante el comando refresh. Consulte REFRESH (MATERIALIZED VIEW o STREAMING TABLE) El comportamiento asociado a cada enfoque es el siguiente:
- Sincrónico: una actualización sincrónica impide que otras operaciones continúen hasta que se complete la actualización. Si el resultado es necesario para el paso siguiente, como al secuenciar operaciones de actualización en herramientas de orquestación como Trabajos de Databricks, use una actualización sincrónica. Para orquestar vistas materializadas con un trabajo, use el tipo de tarea SQL . Consulte Programación y orquestación de flujos de trabajo.
- Asincrónico: una actualización asincrónica inicia un trabajo en segundo plano en el proceso de Delta Live Tables cuando comienza una actualización de vista materializada, lo que permite que el comando devuelva antes de que se complete la carga de datos. Este tipo de actualización puede ahorrar en costo porque la operación no contiene necesariamente la capacidad de proceso en el almacenamiento donde se inicia el comando. Si la actualización se vuelve inactiva y no se está ejecutando ninguna otra tarea, el almacenamiento puede apagarse mientras la actualización usa otro proceso disponible. Además, las actualizaciones asincrónicas admiten iniciar varias operaciones en paralelo.
Algunas consultas se pueden actualizar de manera incremental. Consulte Actualización incremental para vistas materializadas. Si no se puede realizar una actualización incremental, se realiza una actualización completa en su lugar.
Programación de actualizaciones de vistas materializadas
Puede configurar una vista materializada de Databricks SQL para actualizarse automáticamente en función de una programación definida. Para establecer la programación, realice una de las siguientes acciones:
- Configure la programación con la cláusula
SCHEDULE
al crear la vista materializada - Agregue una programación con la instrucción ALTERAR VISTA MATERIALIZADA.
Cuando se crea una programación, se configura automáticamente un nuevo trabajo de Databricks para procesar la actualización.
Para ver la programación, siga uno de estos procedimientos:
- Ejecute la instrucción
DESCRIBE EXTENDED
desde el editor de SQL en la interfaz de usuario de Azure Databricks. - Use el Explorador de catálogos para ver la vista materializada. La programación aparece en la pestaña Información general, en Estado de actualización. Consulte ¿Qué es el Catalog Explorer?.
Visualización del estado de una actualización de vista materializada
Nota:
Dado que una canalización de Delta Live Tables administra las actualizaciones de las vistas materializadas, la latencia se incurre en el tiempo de inicio de la canalización. Este tiempo puede estar entre segundos y minutos, además del tiempo necesario para realizar la actualización.
Puede ver el estado de una actualización de vista materializada viendo la canalización que administra la vista materializada en la interfaz de usuario de Delta Live Tables o viendo la Información de actualización devuelta por el comando DESCRIBE EXTENDED
para la vista materializada.
También puede ver el historial de actualización de una vista materializada consultando el registro de eventos de Delta Live Tables. Consulte Ver el historial de actualizaciones de una vista materializada.
Visualización del estado de actualización en la interfaz de usuario de Delta Live Tables
De manera predeterminada, la canalización de Delta Live Tables que administra una vista materializada no está visible en la interfaz de usuario de Delta Live Tables. Para ver la canalización en la interfaz de usuario de Delta Live Tables, debe acceder directamente al vínculo a la página Detalles de canalización de la canalización. Para acceder al vínculo:
- Copie y pegue el vínculo que se muestra en la fila Actualización más reciente de la tabla devuelta por la instrucción
DESCRIBE EXTENDED
. - En la pestaña de linaje de la vista materializada, haga clic en Canalizaciones y, a continuación, haga clic en el vínculo de la canalización.
Para los comandos REFRESH
asíncronos enviados mediante el editor de SQL en la interfaz de usuario de Azure Databricks, puede ver el estado de actualización siguiendo el vínculo que se muestra en el panel Resultados.
Detención de una actualización activa
Para detener una actualización activa en la interfaz de usuario de Delta Live Tables, en la página Detalles de la canalización, haga clic en Detener para detener la actualización de la canalización. También puede detener la actualización con la CLI de Databricks o la operación POST /api/2.0/pipelines/{pipeline_id}/stop en la API Pipelines.
Actualización de la definición de una vista materializada
Para actualizar la definición de una vista materializada, primero debe quitar y, a continuación, volver a crear la vista materializada.
Anulación de una vista materializada
Nota:
Para enviar el comando para anular una vista materializada, debe ser el propietario de esa vista materializada.
Para anular una vista materializada, use la instrucción DROP VIEW. Para enviar una instrucción DROP
, puede usar el editor de SQL en la interfaz de usuario de Azure Databricks, la CLI de Databricks SQL o la API de Databricks SQL. En el ejemplo siguiente se anula la vista materializada mv1
:
DROP MATERIALIZED VIEW mv1;
Descripción de una vista materializada
Para recuperar las columnas y los tipos de datos de una vista materializada, use la instrucción DESCRIBE
. Para recuperar las columnas, los tipos de datos y los metadatos, como el propietario, la ubicación, la hora de creación y el estado de actualización de una vista materializada, use DESCRIBE EXTENDED
. Para enviar una instrucción DESCRIBE
, use el editor de SQL en la interfaz de usuario de Azure Databricks, la CLI de Databricks SQL o la API de Databricks SQL.
Cambio del propietario de una vista materializada
Puede cambiar el propietario de una vista materializada si es un administrador de metastore y un administrador del área de trabajo. Las vistas materializadas crean y usan automáticamente canalizaciones de Delta Live Tables para procesar los cambios. Siga estos pasos para cambiar un propietario de vistas materializadas:
- En la pestaña de linaje de la vista materializada, haga clic en Canalizaciones y, a continuación, haga clic en el vínculo de la canalización.
- Haga clic en el menú kebab a la derecha del nombre de la canalización y haga clic en Permisos. Se abrirá el cuadro de diálogo de permisos.
- Haga clic en x a la derecha del nombre del propietario actual para quitar el propietario actual.
- Empiece a escribir para filtrar la lista de usuarios disponibles. Haga clic en el usuario que debe ser el nuevo propietario de la canalización.
- Haga clic en Guardar para guardar los cambios y cerrar el cuadro de diálogo.
Todos los recursos de canalización, incluidas las vistas materializadas definidas en la canalización, son propiedad del nuevo propietario de la canalización. Todas las actualizaciones futuras se ejecutan con la nueva identidad del propietario.
Control del acceso a las vistas materializadas
Las vistas materializadas admiten controles de acceso enriquecidos para admitir el uso compartido de datos, a la vez que evitan exponer datos potencialmente privados. Un propietario de vista materializada puede conceder privilegios SELECT
a otros usuarios. Los usuarios con acceso SELECT
a la vista materializada no necesitan acceso SELECT
a las tablas a las que hace referencia la vista materializada. Este control de acceso permite el uso compartido de datos al tiempo que controla el acceso a los datos subyacentes.
Concesión de privilegios a una vista materializada
Para conceder acceso a una vista materializada, use la instrucción GRANT
:
GRANT
privilege_type [, privilege_type ] ...
ON <mv_name> TO principal;
El privilege_type puede ser:
SELECT
: el usuario puedeSELECT
la vista materializada.REFRESH
: el usuario puedeREFRESH
la vista materializada. Las actualizaciones se ejecutan mediante los permisos del propietario.
En el siguiente ejemplo se crea una vista materializada y se conceden privilegios de selección y actualización a un usuario:
CREATE MATERIALIZED VIEW <mv_name> AS SELECT * FROM <base_table>;
GRANT SELECT ON <mv_name> TO user;
GRANT REFRESH ON <mv_name> TO user;
Revocación de privilegios de una vista materializada
Para revocar el acceso a una vista materializada, use la instrucción REVOKE
:
REVOKE
privilege_type [, privilege_type ]
ON <name> FROM principal;
Cuando se revocan privilegios SELECT
en una tabla base del propietario de la vista materializada o de cualquier otro usuario al que se hayan concedido privilegios SELECT
a la vista materializada, o se quita la tabla base, el propietario de la vista materializada o el usuario a los que se ha concedido acceso todavía pueden consultar la vista materializada. Sin embargo, se produce el siguiente comportamiento:
- El propietario de la vista materializada u otros usuarios que han perdido el acceso a una vista materializada ya no pueden
REFRESH
esa vista materializada y la vista materializada se volverá obsoleta. - Si se automatiza con una programación, se produce un error en la siguiente programación
REFRESH
o no se ejecuta.
En el ejemplo siguiente se revoca el privilegio SELECT
de mv1
:
REVOKE SELECT ON mv1 FROM user1;
Habilitar cambio de fuente de distribución de datos
La fuente de distribución de datos modificados es necesaria en las tablas base de vistas materializadas, excepto en determinados casos de uso avanzados. Para habilitar la fuente de distribución de datos de cambios en una tabla base, establezca la propiedad de la tabla delta.enableChangeDataFeed
usando la siguiente sintaxis:
ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
Ver el historial de actualizaciones de una vista materializada
Para ver el estado de las operaciones REFRESH
en una vista materializada, incluidas las actualizaciones actuales y pasadas, consulte el registro de eventos de Delta Live Tables:
SELECT
*
FROM
event_log(TABLE(<fully-qualified-table-name>))
WHERE
event_type = "update_progress"
ORDER BY
timestamp desc;
Reemplace <fully-qualified-table-name>
por el nombre completo de la vista materializada, incluido el catálogo y el esquema.
Consulte ¿Qué es el registro de eventos de Delta Live Tables?.
Limitaciones
- Para conocer los requisitos de proceso y área de trabajo, consulte Requisitos.
- Las vistas materializadas no admiten columnas de identidad ni claves suplentes.
- Si una vista materializada usa un agregado de suma en una columna que se puede establecer en
NULL
y solo los valoresNULL
permanecen en esa columna, el valor agregado resultante de las vistas materializadas es cero en lugar deNULL
. - No se puede leer una fuente de distribución de datos modificados desde una vista materializada.
- Las consultas de viaje de tiempo no se suportan en vistas materializadas.
- Los archivos subyacentes que admiten vistas materializadas pueden incluir datos de tablas ascendentes (incluida la posible información de identificación personal) que no aparecen en la definición de vista materializada. Estos datos se agregan automáticamente al almacenamiento subyacente para admitir la actualización incremental de las vistas materializadas. Dado que los archivos subyacentes de una vista materializada podrían arriesgarse a exponer datos de tablas ascendentes que no forman parte del esquema de la vista materializada, Databricks recomienda no compartir el almacenamiento subyacente con consumidores descendentes que no son de confianza. Por ejemplo, supongamos que la definición de una vista materializada incluye una cláusula
COUNT(DISTINCT field_a)
. Aunque la definición de la vista materializada solo incluye la cláusula de agregadoCOUNT DISTINCT
, los archivos subyacentes contendrán una lista de los valores reales defield_a
.