Compartir a través de


Uso de vistas materializadas en Databricks SQL

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 análisis y procesamiento de datos.

Nota

Si necesita usar una conexión de Azure Private Link con la vista materializada, póngase en contacto con el representante de Databricks.

Importante

Las vistas materializadas creadas en Databricks SQL están respaldadas por una canalización de Delta Live Tables sin servidor. El área de trabajo debe admitir canalizaciones sin servidor para usar esta funcionalidad.

¿Qué son las vistas materializadas?

En Databricks SQL, las vistas materializadas son tablas administradas por el 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 del usuario final porque, en algunos casos, pueden calcular incrementalmente los cambios de las tablas base.

Las vistas materializadas se admitieron primero en Azure Databricks con el lanzamiento de Delta Live Tables. Al crear una vista materializada en una instancia de un almacén de Databricks SQL 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 las canalizaciones API. Consulte Ver el estado de una actualización de vista materializada.

Requisitos

Para crear o actualizar vistas materializadas:

  • Debe utilizar un almacén pro o SQL sin servidor habilitado para Unity Catalog.

  • 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 de SQL sin servidor.

Para consultar vistas materializadas:

  • Debe ser el propietario de la vista materializada o tener SELECT en la vista materializada, junto con USE SCHEMA y USE 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 en 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 sobre el uso de vistas materializadas, consulte Limitaciones.

Crear una vista materializada

La vista materializada de Databricks SQL CREATE las operaciones usan un almacén de SQL de Databricks para crear y cargar datos en la vista materializada. La creación de 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 la vista materializada se actualiza la canalización delta Live Tables procesa la actualización.

Para crear una vista materializada, use la instrucción CREATE MATERIALIZED VIEW. Para enviar una instrucción crear, use el editor de SQL en la interfaz de usuario de Azure Databricks, la CLI de SQL de Databrickso la API de SQL de Databricks.

Nota

El usuario que crea una vista materializada es el propietario de la vista materializada y debe tener los permisos siguientes:

  • Privilegio SELECT en las tablas base a las que hace referencia la vista materializada.
  • Privilegios USE CATALOG y USE SCHEMA en el catálogo y el esquema que contiene las tablas de origen para la vista materializada.
  • Privilegios USE CATALOG y USE SCHEMA en el esquema y catálogo de destino de la vista materializada.
  • Privilegios CREATE TABLE y CREATE 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;

Los comentarios de columna en una tabla base se propagan automáticamente a la nueva vista materializada. Para agregar una programación, restricciones de tabla u otras propiedades, modifique la definición de vista materializada. Para obtener información sobre los detalles de la sintaxis para definir una vista materializada, consulte CREATE MATERIALIZED VIEW.

Establecer el canal en tiempo de ejecución

Las vistas materializadas creadas mediante almacenes de SQL se actualizan automáticamente mediante una canalización de Delta Live Tables. Las canalizaciones de Delta Live Tables usan el tiempo de ejecución en el canal current de manera predeterminada. Consulte Notas de la versión de Delta Live Tables y el proceso de actualización de la versión para obtener información sobre el proceso de versión.

Databricks recomienda usar el canal de current para cargas de trabajo de producción. Las nuevas características se publican por primera vez en el canal de preview. Puede establecer una canalización en el canal delta Live Tables en versión preliminar para probar las nuevas características especificando preview como una propiedad de tabla. Puede especificar esta propiedad al crear la tabla o después de crear la tabla mediante una instrucción ALTER.

En el ejemplo de código siguiente se muestra cómo establecer el canal en versión preliminar en una instrucción CREATE:

CREATE OR REPLACE MATERIALIZED VIEW foo.default.bar
TBLPROPERTIES ('pipelines.channel' = 'preview') as
SELECT
  *
FROM
  range(5)

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 sobre cómo cargar datos de orígenes no admitidos por la federación de Lakehouse, consulte Opciones de formato de datos.

Actualizar 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 forma predeterminada, lo que significa que el comando se bloquea hasta que se complete la operación de actualización. Para actualizar una vista materializada, use la instrucción REFRESH MATERIALIZED VIEW. Consulte REFRESH (MATERIALIZED VIEW o STREAMING TABLE) 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 asociado a un almacenamiento de SQL, el CLI de SQL de Databrickso la API de SQL de Databricks.

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 Databricks SQL Warehouse 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óncontinua.

Nota

El entorno de ejecución de Delta Live Tables no puede detectar cambios en orígenes de datos no 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 establecer una operación de actualización para que se produzca de forma asincrónica. Esto se puede establecer mediante el comando actualizar. 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 organizar vistas materializadas con un trabajo, use el tipo de tarea SQL. Consulte Introducción a la orquestación en Databricks.
  • 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 incrementalmente. Consulte Actualización incremental para obtener vistas materializadas. Si no se puede realizar una actualización incremental, se realiza una actualización completa en su lugar.

Actualización de la vista materializada de programación

Puede configurar una vista materializada de Databricks SQL para actualizarse automáticamente en función de una programación definida. Para establecer una programación, realice una de las siguientes acciones:

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, realice una de las siguientes acciones:

  • 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 Explorador de catálogos?.

Ver el estado de una actualización de vista materializada

Nota

Dado que una canalización de Delta Live Tables administra las actualizaciones de vistas materializadas, la latencia 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 el Actualizar información devuelto 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 delta Live Tables. Consulte Ver el historial de actualizaciones de una vista materializada.

Supervisión de ejecuciones mediante el historial de consultas

Puede usar la página del historial de consultas para acceder a los detalles de la consulta y a los perfiles de consulta que pueden ayudarle a identificar consultas con un rendimiento deficiente y cuellos de botella en la canalización delta Live Tables que se usa para ejecutar las actualizaciones de la tabla de streaming. Para obtener información general sobre el tipo de información disponible para los historiales de consultas y los perfiles de consulta, consulte Historial de consultas y Perfil de consulta.

Importante

Esta característica está en Versión preliminar pública. Los administradores de áreas de trabajo pueden habilitar esta característica desde la página Versiones preliminares. Consulte Administración de versiones preliminares de Azure Databricks.

Todas las instrucciones relacionadas con las vistas materializadas aparecen en el historial de consultas. Puede usar el filtro desplegable Instrucción para seleccionar cualquier comando e inspeccionar las consultas relacionadas. Todas las instrucciones CREATE van seguidas de una instrucción REFRESH que se ejecuta de forma asincrónica en una canalización de Delta Live Tables. Las instrucciones REFRESH suelen incluir planes de consulta detallados que proporcionan información sobre la optimización del rendimiento.

Para acceder a las instrucciones REFRESH en la interfaz de usuario del historial de consultas, siga estos pasos:

  1. Haga clic en Icono de historial la barra lateral izquierda para abrir la interfaz de usuario Historial de consultas.
  2. Active la casilla REFRESH en el filtro desplegable instrucción.
  3. Haga clic en el nombre de la instrucción de consulta para ver los detalles de resumen, como la duración de la consulta y las métricas agregadas.
  4. Haga clic en Ver perfil de consulta para abrir el perfil de consulta. Para obtener más información sobre cómo navegar por el perfil de consulta, consulte Perfil de consulta.
  5. Opcionalmente, use los vínculos de la sección Origen de Consulta para abrir la consulta o canalización relacionada.

Consulte CREATE MATERIALIZED VIEW.

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 Linaje de la vista materializada, haga clic en Canalizaciones y, a continuación, haga clic en el vínculo de canalización.

Para comandos de REFRESH asincrónicos 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.

Detener 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 el CLI de Databricks o la operación de POST /api/2.0/pipelines/{pipeline_id}/stop en pipelines API.

Actualizar la definición de una vista materializada

Para actualizar la definición de una vista materializada, primero debe quitar y volver a crear la vista materializada.

Eliminar permanentemente registros de una vista materializada con vectores de eliminación habilitados

Importante

La compatibilidad con la instrucción REORG con vistas materializadas está en versión preliminar pública.

Nota

  • El uso de una instrucción REORG con una vista materializada requiere Databricks Runtime 15.4 y versiones posteriores.
  • Aunque puede usar la instrucción REORG con cualquier vista materializada, solo es necesario cuando se eliminan registros de una vista materializada con vectores de eliminación habilitados. El comando no tiene ningún efecto cuando se usa con una vista materializada sin vectores de eliminación habilitados.

Para eliminar físicamente los registros del almacenamiento subyacente para una vista materializada con vectores de eliminación habilitados, como para el cumplimiento del RGPD, se deben realizar pasos adicionales para garantizar que una operación de VACUUM se ejecute en los datos de la vista materializada.

A continuación se describen estos pasos con más detalle:

  1. Ejecute una instrucción REORG en la vista materializada y especifique el parámetro APPLY (PURGE). Por ejemplo, REORG TABLE <materialized-view-name> APPLY (PURGE);. Consulte REORG TABLE.
  2. Espere a que pase el período de retención de datos de la vista materializada. El período de retención de datos predeterminado es siete días, pero se puede configurar con la propiedad delta.deletedFileRetentionDuration tabla. Consulte Configuración de la retención de datos para las consultas de viaje en el tiempo.
  3. REFRESH la vista materializada. Consulte Actualizar una vista materializada. En un plazo de 24 horas de la operación de REFRESH, las tareas de mantenimiento de Delta Live Tables, incluida la operación de VACUUM necesaria para asegurarse de que los registros se eliminan permanentemente, se ejecutan automáticamente. Consulte Tareas de mantenimiento realizadas por Delta Live Tables.

Quitar una vista materializada

Nota

Para enviar el comando para quitar una vista materializada, debe ser el propietario de esa vista materializada o tener el privilegio MANAGE en la vista materializada.

Para quitar 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 SQL de Databrickso la API de SQL de Databricks. En el ejemplo siguiente se quita la vista materializada mv1 :

DROP MATERIALIZED VIEW mv1;

Describir 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 SQL de Databrickso la API de SQL de Databricks.

Cambiar el 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 Linaje de la vista materializada, haga clic en Canalizaciones y, a continuación, haga clic en el vínculo de canalización.
  • Haga clic en Compartir. Aparece el cuadro de diálogo Configuración 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 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 materializado o un usuario con el privilegio MANAGE puede conceder SELECT privilegios a otros usuarios. Los usuarios con acceso SELECT a la vista materializada no necesitan SELECT acceso 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 puede SELECT la vista materializada.
  • REFRESH: el usuario puede REFRESH la vista materializada. Las actualizaciones se ejecutan mediante los permisos del propietario.

En el ejemplo siguiente 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;

Revocar privilegios de una vista materializada

Para revocar el acceso desde una vista materializada, use la instrucción REVOKE:

REVOKE
  privilege_type [, privilege_type ]
  ON <name> FROM principal;

Cuando se revocan los SELECT privilegios de una tabla base al propietario de la vista materializada o a cualquier otro usuario al que se le hayan concedido privilegios MANAGE o SELECT en la vista materializada, o se elimina la tabla base, el propietario de la vista materializada o el usuario al que se le ha concedido acceso aún puede 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;

Habilitación de la fuente de distribución de datos modificados

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 modificados en una tabla base, establezca la propiedad delta.enableChangeDataFeed tabla mediante la sintaxis siguiente:

ALTER TABLE table1 SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Ver el historial de actualizaciones de una vista materializada

Para ver el estado de las operaciones de 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 NULLcapaz y solo NULL valores permanecen en esa columna, el valor agregado resultante de vistas materializadas es cero en lugar de NULL.
  • No se puede leer un fuente de distribución de datos modificados desde una vista materializada.
  • Las consultas de viaje de tiempo no se admiten 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 agregado COUNT DISTINCT, los archivos subyacentes contendrán una lista de los valores reales de field_a.