Referência do SQL do Spark para exibições materializadas do lago

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] 
)] 
[PARTITIONED BY (col1, col2, ... )] 
[COMMENT "description or comment"] 
[TBLPROPERTIES ("key1"="val1", "key2"="val2", ... )] 
AS select_statement 

Observação

  • 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, MyTestView torna-se mytestview).

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

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, UPDATE ou DELETE contra uma vista materializada do lago de dados. Os dados são preenchidos somente pela SELECT consulta na definição.
  • Nenhuma consulta de viagem no tempo — a SELECT consulta 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 OF ou TIMESTAMP 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 SELECT consulta 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.