Referência do Spark SQL para vistas materializadas do lago

Este artigo fornece a sintaxe SQL do Spark para criar, listar, renomear e eliminar vistas de lagos materializadas no Fabric.

Sugestão

Para criar a sua primeira vista materializada para o lago, consulte Comece com vistas materializadas para o lago.

Crie uma vista materializada do lago

Você pode definir uma vista materializada do lago a partir de qualquer mesa ou de outra vista materializada do lago dentro de uma casa do lago.

Sintaxe

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 

Observação

Arguments

Parâmetro Descrição
OR REPLACE Sobrescreve qualquer vista materializada existente para o lago com o mesmo nome. Não pode ser combinado com IF NOT EXISTS.
IF NOT EXISTS Cria a vista materializada do lago apenas se esta ainda não existir. A instrução é executada sem erro se a vista já estiver definida. Não pode ser combinado com OR REPLACE.
MLV_Identifier Nome da vista materializada do lago. Pode ser totalmente qualificado como workspace.lakehouse.schema.name.
CONSTRAINT ... CHECK Define uma regra de qualidade de dados. A CHECK cláusula especifica uma expressão booleana que cada linha deve satisfazer. Podes definir múltiplas restrições.
ON MISMATCH Ação a tomar quando uma linha viola uma restrição. DROP remove silenciosamente a fila; FAIL Para a atualização com um erro. A predefinição é FAIL.
REFRESH_HINT Declara uma ou mais colunas que identificam de forma única linhas para processamento incremental de atualizações e eliminações (pré-visualização).
PARTITIONED BY Colunas para particionar a vista materializada do lago, o que pode melhorar o desempenho das consultas para leituras filtradas.
COMMENT Descrição em texto livre armazenada com a definição materializada da vista do lago.
TBLPROPERTIES Pares-chave-valor armazenados como metadados na vista do lago materializada.
AS select_statement A SELECT consulta que define os dados na vista materializada do lago.

Examples

O exemplo seguinte cria uma vista de lago materializada com uma restrição de qualidade de dados, um comentário e particionamento. A cláusula OR REPLACE substitui qualquer vista existente com o mesmo nome.

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

O exemplo seguinte cria uma vista materializada do lago mais simples. A IF NOT EXISTS cláusula previne um erro se a vista já existir, tornando-a segura para scripts de implementação.

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

Sugestão

Gere a renovação materializada da vista para o lago a partir da sua casa

Depois de criar as suas vistas materializadas do lake, não orqueste a respetiva atualização a partir de um notebook. Em vez disso, use as duas funcionalidades integradas no lakehouse:

  • Linhagem: O Fabric determina a ordem das dependências entre as suas vistas de lake materializadas a partir das respetivas definições. Para abrir a vista de linhagem, selecione o separador Vistas de lagos materializados na fita e depois selecione Gerir. A partir daí, pode acompanhar uma execução em curso e inspecionar as dependências ascendentes e descendentes de cada visualização.
  • Atualização agendada: A partir da mesma vista Gerir , crie um ou mais horários para atualizar todas as vistas do lago materializadas ou um subconjunto selecionado. Cada agendamento é executado de forma independente e atualiza as visualizações por ordem de dependência, garantindo que as visualizações a jusante leem sempre dados atualizados das suas visualizações a montante. O Fabric repete automaticamente as tentativas em caso de falhas transitórias.

Use cadernos para escrever e iterar sobre as suas definições materializadas de vista do lago. Deixe a linhagem e a atualização agendada assegurarem a ordenação, a execução e as novas tentativas — para obter dados fiáveis e reproduzíveis com menos código para manter.

Importar ficheiros com USING OneLake_Files

Para além de definir uma vista de lago materializada a partir de tabelas, pode definir uma que ingere ficheiros CSV ou Parquet diretamente do OneLake. Uma vista para ingestão de ficheiros utiliza USING OneLake_Files com uma pasta física do OneLake, um atalho para uma pasta do OneLake ou um caminho para um único ficheiro. Pode, opcionalmente, usar uma cláusula sem FROM AS SELECT para filtrar, estruturar e agrupar os dados de origem à medida que são ingeridos.

A tabela seguinte mostra que sintaxe se aplica a cada estilo de autoria:

Aspect Visualização materializada de data lake baseada em tabela Vista materializada do lago baseada em ficheiros
Source Mesas ou outras vistas materializadas para o lago Uma pasta física OneLake, atalho de pasta OneLake ou ficheiro único
Definição AS select_statement USING OneLake_Files + OPTIONS + opcional FROM-less AS SELECT
Formatos Qualquer tabela consultável CSV, Parquet
Esquema Derivado do SELECT schema_mode = DYNAMIC ou FIXED
Linhagem de origem Tabelas/vistas de origem Localização de origem; opcionalmente, projetar a __filepath__ coluna de metadados de origem quando precisar de rastreabilidade de ficheiro por linha
Camada típica Prata, ouro Bronze
Restrições de qualidade dos dados Suportado Suportado no momento da ingestão

Sintaxe

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

Observação

Não especifique uma cláusula FROM na AS SELECT ingestão de ficheiros. A origem já está associada a USING OneLake_Files e à opção path.

Referência do método OPTIONS

Option Aplica-se a Descrição
format CSV, Parquet Formato de ficheiro de origem. Os valores suportados são csv e parquet.
path CSV, Parquet Pasta física do OneLake, atalho para a pasta do OneLake ou caminho ABFSS de ficheiro único. Os ficheiros disponíveis em subpastas aninhadas são ingeridos recursivamente quando a vista é criada. Use uma barra no final no caso de uma pasta ou inclua a extensão do ficheiro no caso de um único ficheiro.
header CSV Indica se a primeira linha de cada ficheiro contém nomes de colunas. O valor padrão é false.
delimiter CSV Carácter delimitador de campos (por exemplo, , ou |). A predefinição é uma vírgula.
sep CSV Alias para delimiter.
quote CSV Caractere usado para citar valores.
escape CSV Personagem usada para escapar de uma citação dentro de um valor já citado.
nullValue CSV Cadeia que representa um valor nulo.
ignoreLeadingWhiteSpace CSV Se devem ser removidos os espaços iniciais dos valores.
ignoreTrailingWhiteSpace CSV Indica se devem ser removidos os espaços finais dos valores.
multiLine CSV Se um valor citado pode abranger várias linhas. O valor padrão é false.
dateFormat CSV Padrão de data em Java usado para analisar valores de data, como MM/dd/yyyy.
timestampFormat CSV Padrão Java de marca temporal utilizado para interpretar valores de marca temporal.
encoding CSV Codificação de caracteres, como UTF-8, ISO-8859-1, UTF-16, ou Windows-1252.
comment CSV Carácter que indica uma linha como comentário a ignorar.
inferSchema CSV Indica se devem ser inferidos os tipos das colunas. Quando false, as colunas são lidas como cadeias de caracteres. Use FIXED o modo esquema ao desativar a inferência.
columnNameOfCorruptRecord CSV Nome de uma coluna de cadeias de caracteres que recebe o texto bruto das linhas malformadas. As linhas válidas contêm NULL nesta coluna. Inclua a coluna na saída AS SELECT.

Importante

A Fabric gere o manuseamento em filas malformadas. Não definas a opção CSV mode do Spark.

Referência de TBLPROPERTIES

Property Values Descrição
schema_mode DYNAMIC (padrão), FIXED DYNAMIC adiciona colunas recém-descobertas e escreve NULL quando um ficheiro não contém uma coluna estabelecida. FIXED fixa o esquema aquando da criação e rejeita desvios subsequentes.
refresh_mode APPEND_ONLY, FULL, MIRROR Para pastas, APPEND_ONLY adiciona linhas de novos ficheiros, FULL reprocessa a pasta atual como um instantâneo e MIRROR reflete adições e eliminações de ficheiros. Uma fonte de ficheiro único utiliza FULL semântica de atualização.

Exemplo

O exemplo seguinte carrega uma pasta de ficheiros CSV com uma linha de cabeçalho numa vista bronze. Cada linha também recebe uma __filepath__ coluna que regista o ficheiro fonte de onde foi lida.

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

Pode então construir vistas de lagos materializados a jusante e ouro que selecionam entre bronze.raw_orders; O Fabric regista a dependência e atualiza-as por ordem. Para rastrear ficheiros através do pipeline, veja Gerenciar a linhagem de visualizações materializadas do Fabric.

Filtrar, transformar e validar ficheiros durante a ingestão

Utilize um AS SELECT sem cláusula FROM para selecionar colunas, filtrar linhas, converter valores, adicionar colunas calculadas, agregar dados ou aplicar funções de janela. As restrições de ingestão de ficheiros correm contra a saída projetada, pelo que uma restrição pode referenciar um alias calculado.

O exemplo seguinte captura linhas malformadas, aplica uma regra de qualidade de dados ao nível das linhas, filtra a entrada e particiona a saída 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;

Consulta as linhas capturadas para inspeção ou remediação:

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

Também pode criar resultados agregados ou materializados em janelas diretamente a partir de ficheiros:

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;

As expressões suportadas incluem funções aritméticas, de agregação, estatísticas, de janela e de classificação padrão do Spark SQL.

Ingerir um único ficheiro

Define path para um ficheiro CSV ou Parquet em vez de uma pasta. Uma fonte de ficheiro único utiliza a semântica de atualização de FULL, pelo que a substituição do ficheiro substitui o 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'
);

Observação

Quando usas FIXED schema e a pasta de origem contém vários ficheiros com esquemas diferentes na altura do inicial CREATE, a vista falha porque não consegue conciliar um único esquema fixo. Aponte FIXED para ficheiros que partilham o mesmo esquema ou utilizem DYNAMIC. Esta é uma restrição conhecida, semelhante ao comportamento de esquema fixo em transformações de atalho.

Importante

Caminhos de origem que contêm um espaço bruto ou %20 que não são atualmente aceites. Pode usar um atalho de pasta OneLake como fonte: a criação ingere ficheiros disponíveis na raiz do atalho e em pastas aninhadas. A atualização gerida deteta novos ficheiros adicionados na raiz do atalho, mas não deteta recursivamente novos ficheiros adicionados em pastas de atalho aninhadas.

Sugestão

Para reprocessar toda a pasta de origem a pedido, execute REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Tal como nas visualizações baseadas em tabelas, não orqueste a atualização contínua a partir de um notebook — utilize Lineage e Atualização agendada para detetar automaticamente novos ficheiros.

Obtenha uma lista de vistas materializadas do lago

Para obter a lista de todas as vistas de lago materializadas num esquema, use a seguinte sintaxe:

SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;

Por exemplo, para listar todas as vistas materializadas do lago no silver esquema:

SHOW MATERIALIZED LAKE VIEWS IN silver;

Recuperar a instrução que criou uma vista materializada do lago

Para obter a instrução CREATE para uma vista materializada de lago, utilize a seguinte sintaxe:

SHOW CREATE MATERIALIZED LAKE VIEW MLV_Identifier;

Por exemplo, para recuperar a definição de products_with_sales:

SHOW CREATE MATERIALIZED LAKE VIEW products_with_sales;

Atualizar uma vista materializada do lago

Para modificar a definição de uma vista de lago materializada (como a SELECT consulta, restrições ou particionamento), use o comando CREATE OR REPLACE (CRIAR OU SUBSTITUIR ). Alternativamente, podes apagar a visualização existente e recriá-la.

Renomear uma vista materializada do lake

Para renomear uma vista de lago materializada existente, use o ALTER MATERIALIZED LAKE VIEW comando. A sintaxe é:

ALTER MATERIALIZED LAKE VIEW MLV_Identifier RENAME TO MLV_Identifier_New;

Por exemplo, para renomear products_with_sales:

ALTER MATERIALIZED LAKE VIEW products_with_sales RENAME TO products_with_sales_v2;

Observação

O ALTER MATERIALIZED LAKE VIEW comando é suportado apenas para renomeação. Para modificar a definição ou outras propriedades (como a SELECT consulta, restrições ou particionamento), veja Atualizar uma vista de lago materializada.

Apagar uma vista materializada do lago

Pode eliminar uma vista materializada do lake usando a opção Eliminar no explorador de objetos do lakehouse ou executando o comando DROP. A sintaxe é:

DROP MATERIALIZED LAKE VIEW MLV_Identifier;

Por exemplo, para eliminar products_with_sales:

DROP MATERIALIZED LAKE VIEW products_with_sales;

Observação

Soltar ou renomear uma vista de lago materializada afeta a visualização de linhagem e a atualização programada. Certifique-se de atualizar a referência em todas as vistas do lago materializadas dependentes.

Limitações atuais

As seguintes limitações aplicam-se às instruções SQL do Spark para vistas materializadas de lagos:

  • Nomes de esquemas — Nomes de esquemas em maiúsculas (por exemplo, MYSCHEMA) não são suportados. Usa maiúsculas mistas ou minúsculas.
  • Nenhuma instrução de linguagem de manipulação de dados (DML) — Não pode executar as instruções INSERT, UPDATE, ou DELETE nas visualizações materializadas do lago. Os dados são preenchidos apenas pela consulta SELECT na definição.
  • Sem consultas de viagem no tempo — A SELECT consulta numa definição de vista de lago materializada não pode usar a sintaxe de viagem no tempo de Delta Lake (por exemplo, VERSION AS OF ou TIMESTAMP AS OF).
  • Sem funções definidas pelo utilizador — As funções definidas pelo utilizador (UDFs) não são suportadas na SELECT consulta que define uma vista de lago materializada.
  • Sem vistas temporárias como fontes — A SELECT consulta pode consultar tabelas e outras vistas materializadas do lago, mas não vistas temporárias.
  • Propriedades do Spark ao nível da sessão — As propriedades de configuração do Spark definidas ao nível da sessão (por exemplo, spark.conf.set(...)) não são aplicadas durante uma atualização programada. Coloque as propriedades ao nível da casa do lago ou do espaço de trabalho em vez disso.
  • Ingestão de ficheiros — As vistas que ingerem ficheiros suportam apenas CSV e Parquet. Uma visualização de FIXEDesquema falhará se a pasta de origem contiver ficheiros com esquemas diferentes no momento da criação. Os caminhos de origem não podem conter espaços. Os atalhos de pasta do OneLake são suportados como origens, mas a atualização gerida não deteta recursivamente os ficheiros adicionados em pastas de atalhos aninhadas.