Referencia de Spark SQL para vistas de lago materializadas

Este artículo proporciona la sintaxis SQL de Spark para crear, listar, renombrar y eliminar vistas materializadas de lagos en Fabric.

Sugerencia

Para crear la primera vista materializada del lago, consulte Introducción a las vistas materializadas del lago.

Creación de una vista de lago materializada

Puede definir una vista materializada del lago desde cualquier tabla o desde otra vista materializada del lago dentro de una casa de lago.

Sintaxis

CREATE [OR REPLACE] MATERIALIZED LAKE VIEW [IF NOT EXISTS] [workspace.lakehouse.schema].MLV_Identifier 
[( 
    CONSTRAINT constraint_name1 CHECK (condition expression1) [ON MISMATCH DROP | FAIL],  
    CONSTRAINT constraint_name2 CHECK (condition expression2) [ON MISMATCH DROP | FAIL] 
)]
[(
    REFRESH_HINT <hint_name> UNIQUE (<column1> [, <column2>, ...])
)]
[PARTITIONED BY (col1, col2, ... )] 
[COMMENT "description or comment"] 
[TBLPROPERTIES ("key1"="val1", "key2"="val2", ... )] 
AS select_statement 

Nota:

Arguments

Parámetro Descripción
OR REPLACE Sobrescribe cualquier vista de lago materializada existente con el mismo nombre. No se puede combinar con IF NOT EXISTS.
IF NOT EXISTS Crea la vista de lago materializada solo si aún no existe. La declaración se ejecuta correctamente si la vista ya se encuentra definida. No se puede combinar con OR REPLACE.
MLV_Identifier Nombre de la vista materializada del lago. Puede ser completamente calificado como workspace.lakehouse.schema.name.
CONSTRAINT ... CHECK Define una regla de calidad de datos. La CHECK cláusula especifica una expresión booleana que cada fila debe satisfacer. Puede definir varias restricciones.
ON MISMATCH Acción que se debe realizar cuando una fila infringe una restricción. DROP quita silenciosamente la fila; FAIL detiene la actualización con un error. El valor predeterminado es FAIL.
REFRESH_HINT Declara una o más columnas que identifican de forma única filas para el procesamiento incremental de actualizaciones y eliminaciones (vista previa).
PARTITIONED BY Columnas para particionar la vista materializada del lago según criterios, lo que puede mejorar el rendimiento de las consultas en las lecturas filtradas.
COMMENT Descripción de texto libre almacenada con la definición de vista de lago materializada.
TBLPROPERTIES Pares clave-valor almacenados como metadatos en la vista materializada del lago.
AS select_statement La consulta SELECT que define los datos en la vista materializada del lago.

Examples

En el ejemplo siguiente se crea una vista de lago materializada con una restricción de calidad de datos, un comentario y una creación de particiones. La OR REPLACE cláusula sobrescribe cualquier vista existente con el mismo nombre.

CREATE OR REPLACE MATERIALIZED LAKE VIEW silver.cleaned_order_data
(
    CONSTRAINT valid_quantity CHECK (quantity > 0) ON MISMATCH DROP
)
PARTITIONED BY (category)
COMMENT "Cleaned order data joined from products and orders"
AS SELECT 
    p.productID,
    p.productName,
    p.category,
    o.orderDate,
    o.quantity,
    o.totalAmount
FROM bronze.products p INNER JOIN bronze.orders o
ON p.productID = o.productID

En el ejemplo siguiente se crea una vista de lago materializada más sencilla. La IF NOT EXISTS cláusula impide un error si la vista ya existe, lo que hace que sea seguro para los scripts de implementación.

CREATE MATERIALIZED LAKE VIEW IF NOT EXISTS silver.products_with_sales AS
SELECT 
    p.productID,
    p.productName,
    p.category,
    CASE  
        WHEN COUNT(o.orderID) OVER (PARTITION BY p.productID) > 0 THEN TRUE  
        ELSE FALSE  
        END AS has_sales 
FROM bronze.products p LEFT JOIN bronze.orders o 
ON p.productID = o.productID

Sugerencia

Administra la actualización de la vista materializada de lago desde tu lakehouse

Después de crear las vistas de lago materializadas, no organice su actualización desde un cuaderno. En su lugar, use las dos funcionalidades integradas en lakehouse:

  • Linaje: Fabric deduce el orden de dependencia entre las vistas materializadas del lago a partir de sus definiciones. Para abrir la vista de linaje, seleccione la pestaña Vistas de lago materializadas de la cinta de opciones y, a continuación, seleccione Administrar. Desde allí, puede seguir una ejecución en curso e inspeccionar las dependencias anteriores y posteriores de cada vista.
  • Actualización programada: en la misma vista Administrar , cree una o varias programaciones para actualizar todas las vistas de lago materializadas o un subconjunto seleccionado. Cada programación se ejecuta independientemente y actualiza las vistas según el orden de dependencias, por lo que las vistas dependientes siempre leen datos actualizados de las vistas de las que dependen. Fabric vuelve a intentar automáticamente las operaciones que fallan de forma transitoria.

Utilice cuadernos de notas para crear e iterar sobre las definiciones de sus vistas materializadas de lago. Deje que el linaje y la actualización programada controlen el orden, la ejecución y los reintentos, para datos confiables y repetibles con menos código que mantener.

Importa archivos con USING OneLake_Files

Además de definir una vista materializada de lago a partir de tablas, puedes definir una que ingiera archivos CSV o Parquet directamente desde OneLake. Una vista de incorporación de archivos usa USING OneLake_Files con una carpeta física de OneLake, un acceso directo a una carpeta de OneLake o una ruta a un único archivo. Puede usar opcionalmente una cláusula FROM-less AS SELECT para filtrar, dar forma a los datos de origen y agregarlos a medida que se ingieren.

La siguiente tabla muestra qué sintaxis se aplica a cada estilo de autoría:

Aspecto Vista materializada de lago de datos basada en tablas Vista materializada del lago basada en archivos
Source Mesas u otras vistas materializadas al lago Una carpeta física de OneLake, un atajo de carpeta OneLake o un solo archivo
Definición AS select_statement USING OneLake_Files + OPTIONS + opcional sin FROM AS SELECT
Formatos Cualquier tabla consultable CSV, Parquet
Esquema Derivado de SELECT schema_mode = DYNAMIC o FIXED
Linaje de origen Tablas/vistas aguas arriba Ubicación de la fuente; opcionalmente, proyecta la columna de __filepath__ metadatos de origen cuando necesites trazabilidad de archivo por fila
Capa típica Plata, oro Bronce
Restricciones de calidad de los datos Soportado Soporte en el momento de la ingestión

Sintaxis

CREATE [OR REPLACE] MATERIALIZED LAKE VIEW [IF NOT EXISTS] [workspace.lakehouse.schema].MLV_Identifier
[(
    CONSTRAINT constraint_name CHECK (condition) ON MISMATCH DROP | FAIL
)]
USING OneLake_Files
OPTIONS (
    'format' = 'csv' | 'parquet',
    'path'   = 'abfss://<workspace>@<host>/<lakehouse>/Files/<folder-or-file>',
    ['header' = 'true' | 'false',]
    ['delimiter' = '<char>',]
    [...]
)
[PARTITIONED BY (column_name [, ...])]
[COMMENT "description"]
[TBLPROPERTIES (
    'schema_mode'  = 'DYNAMIC' | 'FIXED',
    'refresh_mode' = 'APPEND_ONLY' | 'FULL' | 'MIRROR'
)]
[AS SELECT select_expression [...] [WHERE condition]
    [GROUP BY expression [, ...]] [HAVING condition]]

Nota:

No especifiques una FROM cláusula en la ingestión AS SELECTde archivos. La fuente ya está limitada por USING OneLake_Files y la path opción.

Referencia de OPTIONS

Option Se aplica a Descripción
format CSV, Parquet Formato de archivo fuente. Los valores admitidos son csv y parquet.
path CSV, Parquet Carpeta física de OneLake, acceso directo a una carpeta de OneLake o ruta ABFSS de un solo archivo. Los archivos disponibles en subcarpetas anidadas se incorporan de forma recursiva cuando se crea la vista. Usa una barra final para una carpeta o incluye la extensión de archivo para un solo archivo.
header CSV Indica si la primera fila de cada archivo contiene nombres de columnas. Tiene como valor predeterminado false.
delimiter CSV Carácter delimitador de campos (por ejemplo, , o |). El valor predeterminado es una coma.
sep CSV Alias para delimiter.
quote CSV Carácter utilizado para entrecomillar valores.
escape CSV Personaje usado para escapar de una cotización dentro de un valor ya cotizado.
nullValue CSV Cadena que representa un valor NULL.
ignoreLeadingWhiteSpace CSV Indica si se deben eliminar los espacios iniciales de los valores.
ignoreTrailingWhiteSpace CSV Indica si se deben eliminar los espacios en blanco finales de los valores.
multiLine CSV Si un valor citado puede abarcar varias líneas. Tiene como valor predeterminado false.
dateFormat CSV Patrón de fechas en Java usado para analizar valores de fecha, como MM/dd/yyyy.
timestampFormat CSV Patrón de marca de tiempo en Java usado para analizar valores de marca de tiempo.
encoding CSV Codificación de caracteres, como UTF-8, ISO-8859-1, UTF-16, o Windows-1252.
comment CSV Carácter que indica que una línea es un comentario y que debe omitirse.
inferSchema CSV Si se deben inferir los tipos de columna. Cuando false, las columnas se leen como cadenas. Utiliza FIXED el modo esquema al desactivar la inferencia.
columnNameOfCorruptRecord CSV Nombre de una columna de cadena que recibe el texto en bruto para filas malformadas. Las filas válidas contienen NULL en esta columna. Incluya la columna en la salida AS SELECT.

Importante

Fabric gestiona el manejo en filas malformadas. No configures la opción CSV mode de Spark.

Referencia de TBLPROPERTIES

Propiedad Values Descripción
schema_mode DYNAMIC (valor predeterminado), FIXED DYNAMIC Añade columnas recién descubiertas y escribe NULL cuando un archivo no contiene una columna establecida. FIXED fija el esquema en la creación y rechaza la deriva posterior.
refresh_mode APPEND_ONLY, FULL, MIRROR Para carpetas, APPEND_ONLY añade filas de archivos nuevos, FULL reprocesa la carpeta actual como una instantánea y MIRROR refleja añadidos y eliminaciones de archivos. Una fuente de un solo archivo utiliza la semántica de actualización de FULL.

Example

El siguiente ejemplo carga una carpeta de archivos CSV con una fila de encabezado en una vista bronce. Cada fila también recibe una __filepath__ columna que registra el archivo fuente del que fue leído.

CREATE MATERIALIZED LAKE VIEW bronze.raw_orders
USING OneLake_Files
OPTIONS (
    'format' = 'csv',
    'path'   = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/orders/',
    'header' = 'true'
)
TBLPROPERTIES (
    'schema_mode'  = 'DYNAMIC',
    'refresh_mode' = 'APPEND_ONLY'
);

Luego puedes construir vistas de lagos materializadas de plata y oro aguas abajo que seleccionan entre bronze.raw_orders; Fabric registra la dependencia y las refresca en orden. Para rastrear archivos en toda la canalización, consulta Administrar el linaje de las vistas materializadas de lago de Fabric.

Filtrar, transformar y validar archivos durante la ingesta

Utiliza un AS SELECT sin FROM para seleccionar columnas, filtrar filas, convertir valores, añadir columnas calculadas, realizar agregaciones o aplicar funciones de ventana. Las restricciones de ingestión de archivos se ejecutan contra la salida proyectada, por lo que una restricción puede referenciar un alias calculado.

El siguiente ejemplo captura filas malformadas, aplica una regla de calidad de datos a nivel de fila, filtra la entrada y particiona la salida materializada:

CREATE MATERIALIZED LAKE VIEW silver.valid_orders
(
    CONSTRAINT positive_amount
        CHECK (order_amount > 0) ON MISMATCH DROP
)
USING OneLake_Files
OPTIONS (
    'format' = 'csv',
    'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/orders/',
    'header' = 'true',
    'multiLine' = 'true',
    'dateFormat' = 'MM/dd/yyyy',
    'timestampFormat' = 'MM/dd/yyyy HH:mm:ss',
    'encoding' = 'ISO-8859-1',
    'comment' = '#',
    'columnNameOfCorruptRecord' = '_corrupt_record'
)
PARTITIONED BY (region)
COMMENT "Valid orders ingested from CSV"
TBLPROPERTIES (
    'schema_mode' = 'DYNAMIC',
    'refresh_mode' = 'FULL'
)
AS SELECT
    order_id,
    region,
    CAST(amount AS DECIMAL(18,2)) AS order_amount,
    CASE WHEN amount >= 1000 THEN 'high' ELSE 'standard' END AS order_band,
    _corrupt_record,
    __filepath__,
    current_timestamp() AS ingested_at;

Consultar las filas capturadas para inspección o remediación:

SELECT
    _corrupt_record,
    __filepath__,
    ingested_at
FROM silver.valid_orders
WHERE _corrupt_record IS NOT NULL;

También puedes crear resultados agregados o materializados en ventanas directamente a partir de archivos:

CREATE MATERIALIZED LAKE VIEW gold.sales_by_region
USING OneLake_Files
OPTIONS (
    'format' = 'parquet',
    'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/sales/'
)
TBLPROPERTIES ('schema_mode' = 'DYNAMIC', 'refresh_mode' = 'FULL')
AS SELECT
    region,
    COUNT(*) AS order_count,
    SUM(amount) AS total_amount,
    AVG(amount) AS average_amount
GROUP BY region
HAVING SUM(amount) > 0;

Las expresiones soportadas incluyen aritmética estándar SQL de Spark, funciones agregadas, estadísticas, de ventana y de clasificación.

Importar un solo archivo

Configure path en un archivo CSV o Parquet en lugar de una carpeta. Un origen de datos de un solo archivo usa la semántica de actualización FULL, por lo que, al sustituir el archivo, se sustituye el resultado materializado.

CREATE MATERIALIZED LAKE VIEW bronze.monthly_snapshot
USING OneLake_Files
OPTIONS (
    'format' = 'parquet',
    'path' = 'abfss://SalesWorkspace@onelake.dfs.fabric.microsoft.com/SalesLake.Lakehouse/Files/snapshots/2026-08.parquet'
)
TBLPROPERTIES (
    'schema_mode' = 'FIXED',
    'refresh_mode' = 'FULL'
);

Nota:

Cuando usas FIXED schema y la carpeta fuente contiene varios archivos con diferentes esquemas en el momento del inicial CREATE, la vista falla porque no puede conciliar un único esquema fijo. Apunte las vistas FIXED a archivos que comparten un mismo esquema, o use DYNAMIC. Esta es una restricción conocida, similar al comportamiento de esquema fijo de las transformaciones de acceso rápido.

Importante

Las rutas de origen que contienen un espacio en bruto o %20 que no son aceptadas actualmente. Puedes usar un atajo de carpeta de OneLake como origen: al crearlo, se incorporan los archivos disponibles en la raíz del acceso directo y en las carpetas anidadas. La actualización administrada descubre los nuevos archivos agregados en la raíz del acceso directo, pero no descubre de forma recursiva los nuevos archivos agregados dentro de carpetas de acceso directo anidadas.

Sugerencia

Para reprocesar toda la carpeta fuente bajo demanda, ejecuta REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Como ocurre con las vistas basadas en tablas, no orquestres la actualización continua desde un cuaderno: utiliza Lineage y Scheduled refresh para recoger archivos nuevos automáticamente.

Obtener una lista de vistas materializadas del lago

Para obtener la lista de todas las vistas de lago materializadas en un esquema, use la sintaxis siguiente:

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

Por ejemplo, para enumerar todas las vistas materializadas del lago en el silver esquema:

SHOW MATERIALIZED LAKE VIEWS IN silver;

Recuperar la instrucción que creó una vista de lago materializada

Para obtener la CREATE instrucción de una vista de lago materializada, use la siguiente sintaxis:

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

Por ejemplo, para recuperar la definición de products_with_sales:

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

Actualizar una vista materializada de lago

Para modificar la definición de una vista de lago materializada (como la SELECT consulta, las restricciones o la creación de particiones), use el comando CREATE OR REPLACE . Como alternativa, puede eliminar la vista existente y volver a crearla.

Cambiar el nombre de una vista materializada de lago

Para cambiar el nombre de una vista de lago materializada existente, use el ALTER MATERIALIZED LAKE VIEW comando . La sintaxis es:

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

Por ejemplo, para renombrar products_with_sales:

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

Nota:

El ALTER MATERIALIZED LAKE VIEW comando solo se admite para cambiar el nombre. Para modificar la definición u otras propiedades (como la consulta SELECT, las restricciones o la partición), consulte Actualizar una vista de lago materializada.

Eliminar una vista materializada de un lago

Puede eliminar una vista de lago materializada mediante la opción Eliminar en el explorador de objetos lakehouse o ejecutando un DROP comando . La sintaxis es:

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

Por ejemplo, para eliminar products_with_sales:

DROP MATERIALIZED LAKE VIEW products_with_sales;

Nota:

Quitar o cambiar el nombre de una vista de lago materializada afecta a la vista de linaje y la actualización programada. Asegúrese de actualizar la referencia en todas las vistas de lago materializadas dependientes.

Limitaciones actuales

Las siguientes limitaciones se aplican a las instrucciones de Spark SQL para vistas materializadas del lago:

  • Nombres de esquema : no se admiten nombres de esquema en mayúsculas (por ejemplo, MYSCHEMA). Utiliza mayúsculas y minúsculas combinadas.
  • No hay instrucciones de lenguaje de manipulación de datos (DML): no se pueden ejecutar INSERT, UPDATE o DELETE en una vista materializada en un lago de datos. Solo los datos se rellenan por la consulta SELECT en la definición.
  • Sin consultas de viaje de tiempo: la SELECT consulta en una definición de vista de lago materializada no puede usar la sintaxis de viaje en tiempo de Delta Lake (por ejemplo, VERSION AS OF o ).TIMESTAMP AS OF
  • Ninguna función definida por el usuario : las funciones definidas por el usuario (UDF) no se admiten en la SELECT consulta que define una vista de lago materializada.
  • No hay vistas temporales como fuentes — la SELECT consulta puede hacer referencia a tablas y otras vistas de lago materializadas, pero no vistas temporales.
  • Propiedades de Spark de nivel de sesión: las propiedades de configuración de Spark establecidas en el nivel de sesión (por ejemplo, spark.conf.set(...)) no se aplican durante una actualización programada. Establezca las propiedades en el nivel de lago o área de trabajo en su lugar.
  • Ingesta de archivos — Las vistas que ingieren archivos solo admiten CSV y Parquet. Una vista de esquema FIXED da error si la carpeta de origen contiene archivos con diferentes esquemas en el momento de su creación. Las rutas de origen no pueden contener espacios. Se admiten accesos directos de carpetas OneLake como fuentes, pero la actualización gestionada no detecta recursivamente archivos añadidos bajo carpetas de acceso directo anidadas.