Compartir a través de


Uso de vistas materializadas en Databricks SQL

Importante

Esta característica está en versión preliminar pública.

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 la plataforma Data Intelligence de Databricks con el lanzamiento de Delta Live Tables. Al crear una vista materializada en un almacén de Databricks SQL, se crea una canalización de Delta Live Tables 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, la API Delta Live Tables o la CLI de Delta Live Tables. Consulte Visualización del estado de una actualización de vista materializada.

Requisitos

Para obtener información sobre las restricciones al usar vistas materializadas con Databricks SQL, consulte Limitaciones.

Creación de una vista materializada

Para crear una vista materializada, use la instrucción CREATE MATERIALIZED VIEW. Consulte CREATE MATERIALIZED VIEW en la referencia de Databricks SQL. 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
  table1
GROUP BY
  date;

¿Cómo se crean las vistas materializadas?

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. Dado que la creación de una vista materializada es una operación sincrónica en el almacén de Databricks SQL, 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 para cada vista materializada de Databricks SQL. Cuando se actualiza la vista materializada, se inicia una actualización de la canalización de Delta Live Tables para procesar la actualización.

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. Para actualizar una vista materializada, use la instrucción REFRESH MATERIALIZED VIEW. Consulte REFRESH (MATERIALIZED VIEW y STREAMING TABLE) en la referencia de Databricks SQL. Para enviar una instrucción refresh, use el editor de SQL en la interfaz de usuario de Azure Databricks, 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 de Databricks SQL usan Delta Live Tables para las operaciones de actualización. Cuando se actualiza la vista materializada, se inicia una actualización de la canalización de Delta Live Tables que administra la vista materializada para procesar la actualización.

Dado que una canalización de Delta Live Tables administra la actualización, no se usa el almacén de Databricks SQL que se usa para crear la vista materializada y no es necesario ejecutarlo durante la operación de actualización.

Algunas consultas se pueden actualizar de manera incremental. Consulte Operaciones de actualización 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. Configure esta programación con la cláusula SCHEDULE cuando cree la vista materializada o agregue una programación con la instrucción ALTER VIEW. Cuando se crea una programación, se configura automáticamente un nuevo trabajo de Databricks para procesar la actualización. Puede ver la programación en cualquier momento con la instrucción DESCRIBE EXTENDED.

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.

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:

  • Si envía el comando REFRESH en el editor de SQL, siga el vínculo en el panel Resultados.
  • Siga el vínculo devuelto 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.

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.

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:

  • Haga clic en Icono de trabajosFlujos de trabajoy, a continuación, haga clic en la pestaña Delta Live Tables.
  • Haga clic en el nombre de la canalización cuyo propietario desea cambiar.
  • 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?.

Determinar si se usa una actualización incremental o completa

Para optimizar el rendimiento de las actualizaciones de las vistas materializadas, Azure Databricks usa un modelo de costo para seleccionar la técnica utilizada para la actualización. En la tabla siguiente se describen estas técnicas:

Técnica ¿Actualización incremental? Descripción
FULL_RECOMPUTE No La vista materializada se volvió a calcular completamente
NO_OP No aplicable La vista materializada no se actualizó porque no se detectaron cambios en la tabla base.
ROW_BASED o PARTITION_OVERWRITE La vista materializada se actualizó de manera incremental mediante la técnica especificada.

Para determinar la técnica utilizada, consulte el registro de eventos de Delta Live Tables donde el event_type es planning_information:

SELECT
  timestamp,
  message
FROM
  event_log(TABLE(<fully-qualified-table-name>))
WHERE
  event_type = 'planning_information'
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

  • Hay restricciones sobre cómo se pueden administrar las vistas materializadas y dónde se pueden consultar:

    • Las vistas materializadas de Databricks SQL solo se pueden crear y actualizar en almacenes de SQL pro y almacenes de SQL sin servidor.
    • Una vista materializada de Databricks SQL solo se puede actualizar desde el área de trabajo que la creó.
    • Las vistas materializadas de Databricks SQL solo se pueden consultar desde almacenes de Databricks SQL, Delta Live Tables y clústeres compartidos que ejecutan Databricks Runtime 11.3 o posterior. No se pueden consultar las vistas materializadas desde clústeres en modo de acceso de usuario único.
  • 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.

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

  • Las vistas materializadas de Databricks SQL no se admiten en las regiones Centro-sur de EE. UU. y Oeste de EE. UU. 2.