Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este artigo fornece a sintaxe do SQL do Spark para criar, listar, renomear e deletar vistas de lagos materializadas no Fabric.
Dica
Para criar sua primeira vista materializada do lago, confira Introdução às vistas materializadas do lago.
Criar uma exibição materializada do lago
Você pode definir uma vista materializada do lago de qualquer tabela ou de outra vista materializada do lago dentro de uma casa de 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
-
REFRESH_HINTestá em versão preliminar. Para mais detalhes sobre o uso de dicas de atualização, veja Habilitar a atualização ótima para exclusões e atualizações nas visualizações materializadas do lago (prévia). - Se o nome do espaço de trabalho contiver espaços, coloque-o entre backticks:
`My Workspace`.lakehouse.schema.view_name - Os nomes de exibição de visualizações de lago materializadas não diferenciam maiúsculas de minúsculas e são convertidos em minúsculas (por exemplo,
MyTestViewtorna-semytestview).
Arguments
| Parâmetro | Descrição |
|---|---|
OR REPLACE |
Substitui qualquer vista de lago materializada existente com o mesmo nome. Não pode ser combinado com IF NOT EXISTS. |
IF NOT EXISTS |
Cria a exibição materializada do lago somente se ela ainda não existir. A instrução terá êxito sem erros se a exibição 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 booliana que cada linha deve satisfazer. Você pode definir várias restrições. |
ON MISMATCH |
Ação a ser tomada quando uma linha viola uma restrição.
DROP remove silenciosamente a linha; FAIL interrompe a atualização com um erro. O padrão é FAIL. |
REFRESH_HINT |
Declara uma ou mais colunas que identificam de forma única linhas para processamento incremental de atualizações e exclusões (prévia). |
PARTITIONED BY |
Colunas para particionar a vista materializada do lago de dados, o que pode melhorar o desempenho da consulta para leituras filtradas. |
COMMENT |
Descrição de texto livre armazenada com a definição de visualização do lago materializada. |
TBLPROPERTIES |
Pares chave-valor armazenados como metadados na exibição materializada do lago. |
AS select_statement |
A SELECT consulta que define os dados na visão materializada do lake. |
Exemplos
O exemplo a seguir cria uma vista materializada de lago com uma restrição de qualidade de dados, um comentário e particionamento. A cláusula OR REPLACE substitui qualquer visualização 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 a seguir cria uma exibição de lago materializada mais simples. A cláusula IF NOT EXISTS impede um erro se a vista já existir, tornando-o seguro para scripts de implantaçã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
Dica
Gerencie a atualização da exibição materializada do lake no seu lakehouse
Depois de criar suas visões materializadas do lake, não orquestre sua atualização a partir de um notebook. Em vez disso, use os dois recursos internos do lakehouse:
- Linhagem: Fabric deriva a ordem de dependência entre suas exibições materializadas do lago de suas definições. Para abrir o modo de exibição de linhagem, selecione a guia Exibições materializadas do lago na faixa de opções e selecione Gerenciar. A partir daí, você pode acompanhar uma execução em andamento e inspecionar as dependências anteriores e posteriores de cada visão.
- Atualização agendada: Na mesma exibição Gerenciar, crie um ou mais agendamentos para atualizar todas as exibições materializadas do lake ou um subconjunto selecionado. Cada agendamento é executado de forma independente e atualiza exibições em ordem de dependência, portanto, exibições downstream sempre leem dados novos de suas exibições upstream. Fabric tenta novamente falhas transitórias para você.
Use blocos de anotações para criar e iterar em suas definições de exibição de lago materializadas. Deixe que a linhagem de dados e a atualização agendada cuidem da ordenação, da execução e das novas tentativas — para obter dados confiáveis e reproduzíveis com menos código para manter.
Ingerir arquivos com USING OneLake_Files
Além de definir uma visualização de lago materializado a partir de tabelas, você pode definir uma que ingere arquivos CSV ou Parquet diretamente do OneLake. Uma exibição de ingestão de arquivos usa USING OneLake_Files com uma pasta física do OneLake, um atalho para pasta do OneLake ou um caminho para um único arquivo. Você pode opcionalmente usar uma cláusula AS SELECT sem FROM para filtrar, estruturar e agregar os dados de origem à medida que são ingeridos.
A tabela a seguir mostra qual sintaxe se aplica a cada estilo de autoria:
| Aspeto | Vista materializada do lago baseada em tabela | Vista materializada do lago baseada em arquivos |
|---|---|---|
| Source | Mesas ou outras vistas materializadas para o lago | Uma pasta física OneLake, atalho de pasta OneLake ou arquivo único |
| Definição | AS select_statement |
USING OneLake_Files
+
OPTIONS + opcional sem FROM AS SELECT |
| Formatos | Qualquer tabela consultável | CSV, Parquet |
| Esquema | Derivado do SELECT |
schema_mode
=
DYNAMIC ou FIXED |
| Linhagem de origem | Tabelas/vistas a montante | Localização de origem; opcionalmente, projetar a __filepath__ coluna de metadados de origem quando precisar de rastreabilidade de arquivo por linha |
| Camada típica | Prata, ouro | Bronze |
| Restrições de qualidade dos dados | Supported | 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 a cláusula FROM na AS SELECT ingestão de arquivos. A origem já está vinculada a USING OneLake_Files e à opção path.
Referência de OPTIONS
| Opção | Aplicável a | Descrição |
|---|---|---|
format |
CSV, Parquet | Formato de arquivo de origem. Os valores com suporte são csv e parquet. |
path |
CSV, Parquet | Pasta física do OneLake, atalho de pasta do OneLake ou caminho ABFSS de arquivo único. Arquivos disponíveis em subpastas aninhadas são ingeridos recursivamente quando a visualização é criada. Use uma barra final para uma pasta ou inclua a extensão do arquivo para um único arquivo. |
header |
CSV | Indica se a primeira linha de cada arquivo contém nomes de colunas. Usa false como padrão. |
delimiter |
CSV | Caractere delimitador de campo (por exemplo, , ou |). O padrão é uma vírgula. |
sep |
CSV | Alias para delimiter. |
quote |
CSV | Caractere usado para colocar valores entre aspas. |
escape |
CSV | Caráter usado para escapar de uma citação dentro de um valor já citado. |
nullValue |
CSV | Cadeia de caracteres que representa um valor nulo. |
ignoreLeadingWhiteSpace |
CSV | Remover ou não os espaços iniciais dos valores. |
ignoreTrailingWhiteSpace |
CSV | Se remover espaços finais dos valores. |
multiLine |
CSV | Se um valor citado pode abranger várias linhas. Usa false como padrão. |
dateFormat |
CSV | Padrão de data em Java usado para analisar valores de data, como MM/dd/yyyy. |
timestampFormat |
CSV | Padrão de timestamp do Java usado para interpretar valores de timestamp. |
encoding |
CSV | Codificação de caracteres, como UTF-8, ISO-8859-1, UTF-16, ou Windows-1252. |
comment |
CSV | Caractere que indica que uma linha é um comentário e deve ser ignorada. |
inferSchema |
CSV | Se deve inferir os tipos de coluna. Quando false, colunas são lidas como strings. Use FIXED o modo esquema ao desativar a inferência. |
columnNameOfCorruptRecord |
CSV | Nome de uma coluna do tipo string que recebe o texto bruto de linhas malformadas. As linhas válidas contêm NULL nesta coluna. Inclua a coluna na saída AS SELECT. |
Importante
Fabric gerencia o manuseio em fileiras malformadas. Não configure 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 arquivo não contém uma coluna estabelecida.
FIXED fixa o esquema no momento da criação e rejeita alterações posteriores. |
refresh_mode |
APPEND_ONLY, FULL, MIRROR |
Para pastas, APPEND_ONLY adiciona linhas de novos arquivos, FULL reprocessa a pasta atual como um snapshot e MIRROR reflete adições e excluções de arquivos. Uma origem de arquivo único usa a semântica de atualização FULL. |
Example
O exemplo a seguir carrega uma pasta de arquivos CSV com linha de cabeçalho em uma visão bronze. Cada linha também recebe uma __filepath__ coluna que registra o arquivo 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'
);
Você pode então construir vistas de lagos materializados a jusante e ouro que selecionam entre bronze.raw_orders; Fabric registra a dependência e as atualiza em ordem. Para rastrear arquivos pelo pipeline, veja Gerenciar a linhagem de vistas de lagos materializadas do Fabric.
Filtre, transforme e valide arquivos durante a ingestão
Use 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. Restrições de ingestão de arquivos são executadas contra a saída projetada, então uma restrição pode referenciar um alias calculado.
O exemplo a seguir captura linhas malformadas, aplica uma regra de qualidade de dados em nível de linha, 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;
Consultar 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;
Você também pode criar resultados agregados ou materializados em janelas diretamente a partir de arquivos:
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 compatíveis incluem operações aritméticas padrão do Spark SQL, funções de agregação, funções estatísticas, funções de janela e funções de classificação.
Ingerir um único arquivo
Defina path para um arquivo CSV ou Parquet em vez de uma pasta. Uma origem de arquivo único usa a semântica de atualização FULL, de modo que, ao substituir o arquivo, o resultado materializado também é substituído.
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 você usa FIXED schema e a pasta de origem contém múltiplos arquivos com esquemas diferentes no momento do inicial CREATE, a visualização falha porque não consegue conciliar um único esquema fixo. Aponte FIXED para arquivos que compartilham o mesmo esquema ou use DYNAMIC. Essa é 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 sem escape ou %20 não são aceitos no momento. Você pode usar um atalho de pasta do OneLake como fonte: na criação, são ingeridos os arquivos disponíveis na raiz do atalho e nas subpastas. A atualização gerenciada descobre novos arquivos adicionados na raiz do atalho, mas não detecta recursivamente novos arquivos adicionados em pastas aninhadas de atalhos.
Dica
Para reprocessar toda a pasta de origem sob demanda, execute REFRESH MATERIALIZED LAKE VIEW <name> FULL;. Assim como nas visualizações baseadas em tabelas, não orquestre uma atualização contínua a partir de um caderno — use a atualização Lineage e a Atualização Programada para captar novos arquivos automaticamente.
Obter uma lista de vistas materializadas do lago
Para obter a lista de todas as exibições materializadas do lago em um esquema, use a seguinte sintaxe:
SHOW MATERIALIZED LAKE VIEWS <IN/FROM> Schema_Name;
Por exemplo, para listar todas as visões de lago materializadas no esquema silver.
SHOW MATERIALIZED LAKE VIEWS IN silver;
Recuperar a instrução que criou uma exibição materializada do lago
Para obter a CREATE instrução de uma exibição de lago materializada, use 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 exibição materializada do lago
Para modificar a definição de uma exibição de lago materializada (como a SELECT consulta, restrições ou particionamento), use o comando CREATE OR REPLACE . Como alternativa, você pode excluir a exibição existente e recriá-la.
Renomear uma exibição materializada do lago
Para renomear uma exibição 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 tem suporte apenas para renomeação. Para modificar a definição ou outras propriedades (como a SELECT consulta, restrições ou particionamento), consulte Atualizar uma exibição de lago materializada.
Excluir uma exibição materializada do lago
Você pode excluir uma exibição materializada do lago usando a opção Excluir no gerenciador de objetos lakehouse ou executando um DROP comando. A sintaxe é:
DROP MATERIALIZED LAKE VIEW MLV_Identifier;
Por exemplo, para excluir products_with_sales:
DROP MATERIALIZED LAKE VIEW products_with_sales;
Observação
Remover ou renomear uma exibição de lago materializada afeta a exibição de linhagem e a atualização agendada. Atualize a referência em todas as exibições de lago materializadas dependentes.
Limitações atuais
As seguintes limitações se aplicam às instruções SQL do Spark para exibições de lago materializadas:
-
Não há suporte para nomes de esquema — nomes de esquema em letras maiúsculas (por exemplo,
MYSCHEMA) . Use maiúsculas ou minúsculas mistas. -
Nenhuma instrução DML (linguagem de manipulação de dados) – você não pode executar instruções de
INSERT,UPDATEouDELETEcontra uma vista materializada do lago de dados. Os dados são preenchidos somente pelaSELECTconsulta na definição. -
Nenhuma consulta de viagem no tempo — a
SELECTconsulta em uma definição de visualização materializada do lago não pode usar a sintaxe de viagem no tempo do Delta Lake (por exemplo,VERSION AS OFouTIMESTAMP AS OF). - As funções definidas pelo usuário (UDFs) não são suportadas na consulta que define um modo de exibição de lago materializado.
-
Sem vistas temporárias como fontes – a
SELECTconsulta pode referenciar tabelas e outras vistas de lago materializadas, mas não vistas temporárias. -
As propriedades do Spark no nível da sessão — as propriedades de configuração do Spark definidas no nível da sessão (por exemplo,
spark.conf.set(...)) não são aplicadas durante uma atualização agendada. Em vez disso, defina propriedades no nível do lakehouse ou do workspace. -
Ingestão de arquivos — Visualizações de ingestimento de arquivos suportam apenas CSV e Parquet. Uma exibição de
FIXED-schema falha se a pasta de origem contiver arquivos com esquemas diferentes na criação. Caminhos de origem não podem conter espaços. Atalhos de pasta do OneLake podem ser usados como fontes, mas a atualização gerenciada não detecta recursivamente arquivos adicionados em pastas de atalho aninhadas.