Compartir a través de


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.

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 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 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 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.

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 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;

Establecimiento del 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 entorno de ejecución en el current canal de forma predeterminada. Consulte las 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 current canal para cargas de trabajo de producción. Las nuevas características se publican por primera vez en el preview canal. Puede establecer una canalización en el canal delta Live Tables de vista previa 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 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:

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.

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 las 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 CREATE instrucciones van seguidas de una REFRESH instrucción que se ejecuta de forma asincrónica en una canalización de Delta Live Tables. Las REFRESH instrucciones suelen incluir planes de consulta detallados que proporcionan información sobre la optimización del rendimiento.

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

  1. Haga clic Icono Historial en la barra lateral izquierda para abrir la interfaz de usuario del historial de consultas.
  2. Active la casilla ACTUALIZAR 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.

Nota:

La vista materializada debe configurarse para ejecutarse mediante el canal de vista previa . Consulte Establecimiento del canal en tiempo de ejecución.

Consulte CREATE MATERIALIZED VIEW (CREAR 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ú menú Kebab 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 puede SELECT la vista materializada.
  • REFRESH: el usuario puede REFRESH 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 valores NULL permanecen en esa columna, el valor agregado resultante de las vistas materializadas es cero en lugar de NULL.
  • 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 agregado COUNT DISTINCT, los archivos subyacentes contendrán una lista de los valores reales de field_a.