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

Observação

  • Se o nome do seu espaço de trabalho contém espaços, inclua-o em backticks: `My Workspace`.lakehouse.schema.view_name
  • Os nomes materializados de vistas de lago são insensíveis a maiúsculas minúsculas e são convertidos para minúsculas (por exemplo, MyTestView torna-se mytestview).

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

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.