Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
- Está
REFRESH_HINTen vista previa. Para más detalles sobre el uso de indicaciones de actualización, consulte Activar la actualización óptima para eliminaciones y actualizaciones en vistas de lago materializadas (versión preliminar). - Si el nombre del área de trabajo contiene espacios, escríbalo entre comillas invertidas:
`My Workspace`.lakehouse.schema.view_name - Los nombres de las vistas materializadas del lago no distinguen mayúsculas de minúsculas y se convierten en minúsculas (por ejemplo,
MyTestViewse convierte enmytestview).
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,UPDATEoDELETEen una vista materializada en un lago de datos. Solo los datos se rellenan por la consultaSELECTen la definición. -
Sin consultas de viaje de tiempo: la
SELECTconsulta 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 OFo ).TIMESTAMP AS OF -
Ninguna función definida por el usuario : las funciones definidas por el usuario (UDF) no se admiten en la
SELECTconsulta que define una vista de lago materializada. -
No hay vistas temporales como fuentes — la
SELECTconsulta 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
FIXEDda 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.