Aggiornamento ottimale per le viste del lago materializzate in una lakehouse

Ogni volta che viene eseguito un aggiornamento pianificato per le viste lake materializzate, Fabric determina la strategia migliore da usare, ovvero nessun aggiornamento, incrementale o completo, in base alle modifiche apportate ai dati di origine. Questo comportamento è denominato aggiornamento ottimale e consente di mantenere aggiornate le viste lake materializzate riducendo al minimo i costi di calcolo e l'ora di aggiornamento.

Questo articolo illustra il funzionamento dell'aggiornamento ottimale, le operazioni di ogni strategia e come passare alla modalità di aggiornamento completa quando necessario.

Annotazioni

L'aggiornamento ottimale non è supportato negli scenari seguenti:

  • Definizioni di PySpark: l'aggiornamento ottimale si applica solo agli MLV definiti con Spark SQL. I MLV definiti da PySpark utilizzano sempre il refresh completo.
  • Tabelle di origine non Delta: viste del lago materializzate che utilizzano tabelle non Delta come sorgente eseguono sempre un aggiornamento completo. Le strategie incrementali e senza aggiornamento richiedono origini di tabella Delta.

Vantaggi dell'aggiornamento ottimale

Analizzando i commit differenziali nelle tabelle di origine, l'aggiornamento ottimale può prendere decisioni intelligenti su come elaborare i dati. Se possibile, ciò può comportare:

  • Costo inferiore: vengono usate meno risorse di calcolo e archiviazione quando Fabric rileva che i dati di origine non sono stati modificati e ignorano completamente l'aggiornamento. Non si applicano costi aggiuntivi per l'aggiornamento ottimale: vengono fatturati in base all'utilizzo del calcolo durante le operazioni di aggiornamento.
  • Miglioramento dell'efficienza: cicli di aggiornamento più veloci quando è necessario elaborare solo i dati modificati, consentendo di ottenere informazioni più aggiornate.
  • Risparmio di tempo: riduzione della durata dell'aggiornamento quando viene applicata l'elaborazione incrementale anziché ricompilare il set di dati completo.

Strategie di aggiornamento ottimali

Nella tabella seguente vengono descritte le strategie di aggiornamento che possono essere selezionate in modo ottimale:

Politica di aggiornamento Description
Nessun aggiornamento Se non vengono rilevati nuovi commit delta nelle tabelle di origine, Fabric ignora completamente l'aggiornamento, evitando un calcolo non necessario.
Aggiornamento incrementale Elabora solo i dati modificati quando vengono rilevati nuovi delta commit nelle tabelle di origine.
Aggiornamento completo Ricompila l'intera vista lake materializzata dal set di dati di origine completo. Questa strategia viene usata quando vengono rilevate espressioni non supportate, quando le modifiche non possono essere elaborate in modo incrementale o quando il set di dati di origine è sufficientemente piccolo che una ricomputazione completa è più veloce rispetto all'elaborazione incrementale.

Importante

L'aggiornamento incrementale richiede la proprietà CDF (Delta Change Data Feed) (delta.enableChangeDataFeed=true) in tutte le tabelle di origine a cui viene fatto riferimento nella definizione materializzata della vista Lake. Senza CDF abilitato, l'aggiornamento ottimale può scegliere solo tra nessun aggiornamento e aggiornamento completo. Per altre informazioni, vedere Abilitare l'aggiornamento incrementale.

Configurare un aggiornamento ottimale

L'opzione di attivazione ottimale offre strategie senza aggiornamento e con aggiornamento completo senza alcuna configurazione aggiuntiva. Per sbloccare la strategia di aggiornamento incrementale, è anche necessario abilitare il feed di dati delle modifiche nelle tabelle di origine.

Attivare la modalità di aggiornamento ottimale

Per impostazione predefinita, la modalità di aggiornamento ottimale è abilitata per una derivazione materializzata della vista lake. Se non è abilitata, seguire questa procedura per attivarla:

  1. Vai alla tua lakehouse e seleziona Viste materializzate del lake.

  2. Selezionare Gestisci e quindi selezionare l'interruttore Aggiornamento ottimale per attivarlo.

    Screenshot che mostra l'interruttore per abilitare la modalità ottimale di riaggiornamento.

Abilitare l'aggiornamento incrementale

Per usare l'aggiornamento incrementale, è necessario abilitare la proprietà CDF (Delta Change Data Feed) in tutte le tabelle di origine o nelle viste del lago materializzate a cui si fa riferimento nella definizione delle viste materializzate del lago. CDF consente a Fabric di leggere solo le righe modificate dopo l'ultimo aggiornamento, invece di rielaborare il set di dati completo.

Senza CDF abilitato, l'aggiornamento ottimale può scegliere solo tra nessun aggiornamento e aggiornamento completo.

L'aggiornamento incrementale è supportato per i dati solo accodati. Se i dati di origine includono eliminazioni o aggiornamenti, Fabric esegue un aggiornamento completo.

Annotazioni

Abilitare il CDF nelle tabelle di origine non ha alcun effetto misurabile sulle prestazioni o sulla capacità di archiviazione per i carichi di lavoro di sola aggiunta, che è lo scenario supportato dall'aggiornamento incrementale. CDF è una proprietà di tabella standard di Delta Lake da cui anche altre funzionalità di Fabric possono trarre vantaggio. Per ulteriori informazioni su come funziona il CDF, consultare Change Data Feed di Delta Lake.

È possibile abilitare CDF in fase di creazione includendo TBLPROPERTIES nell'istruzione CREATE :

CREATE OR REPLACE MATERIALIZED LAKE VIEW silver.cleaned_order_data
TBLPROPERTIES (delta.enableChangeDataFeed=true)
AS
SELECT 
    o.order_id,
    o.order_date,
    o.product_id,
    p.product_name,
    o.quantity,
    p.price,
    o.quantity * p.price AS revenue
FROM bronze.orders o
INNER JOIN bronze.products p
ON o.product_id = p.product_id

Per le tabelle di origine esistenti, usare ALTER TABLE per abilitare CDF:

ALTER TABLE <table-name> SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Ad esempio, per abilitare CDF in entrambe le tabelle di origine dalla guida introduttiva:

ALTER TABLE bronze.products SET TBLPROPERTIES (delta.enableChangeDataFeed = true);
ALTER TABLE bronze.orders SET TBLPROPERTIES (delta.enableChangeDataFeed = true);

Costrutti SQL supportati dall'aggiornamento incrementale

L'aggiornamento incrementale funziona quando la definizione di vista lake materializzata usa solo i costrutti SQL descritti qui. Se la query include costrutti non supportati, ad esempio funzioni finestra o funzioni non deterministiche, Fabric aggiorna comunque i dati, ma esegue il fallback a un aggiornamento completo.

Costrutto SQL Osservazione
Selezionare l'espressione Sono supportate funzioni ed espressioni predefinite deterministiche. Non supportato per l'aggiornamento incrementale: funzioni di aggregazione (SUM(), COUNT(), AVG()MIN(), MAX(), , STDDEV()e così via), GROUP BY, DISTINCTfunzioni finestra e funzioni non deterministiche, ad rand()esempio , uuid()current_timestamp().
FROM Supporta tabelle Delta e viste lake materializzate. Le sottoquery e le CTE funzionano se usano solo le clausole supportate.
WHERE Sono supportate solo le funzioni predefinite deterministiche.
INNER JOIN (associazione interna) Supportato.
LEFT OUTER JOIN/LEFT SEMI JOIN Supportato. L'aggiornamento incrementale funziona solo se la tabella sul lato destro rimane invariata durante il ciclo di aggiornamento. Qualsiasi modifica alla tabella sul lato destro attiva un aggiornamento completo.
UNION ALL Supportato.
WITH Espressioni di tabella comuni se usano solo clausole supportate.
Sottoquery nelle espressioni Le sottoquery all'interno di espressioni SELECT o WHERE , ad esempio sottoquery scalari o EXISTS, attivano un aggiornamento completo se una tabella a cui si fa riferimento ha modifiche.
Vincoli relativi alla qualità dei dati Nei vincoli sono supportate solo le funzioni predefinite deterministiche.

Annotazioni

L'uso di costrutti non supportati non impedisce di creare una vista materializzata del lago. Significa solo che Fabric usa un aggiornamento completo anziché un aggiornamento incrementale.

Aggiornamento completo

L'aggiornamento ottimale passa automaticamente all'aggiornamento completo quando necessario, quindi di solito non è necessario forzare l'aggiornamento. Tuttavia, esistono casi in cui potrebbe essere necessario attivare manualmente un aggiornamento completo, ad esempio per risolvere i problemi relativi ai risultati imprevisti o per rielaborare i dati dopo una correzione.

Eseguire un aggiornamento completo monouso con SQL

Per forzare un aggiornamento completo di una vista materializzata del lago specifica, eseguire il comando seguente:

REFRESH MATERIALIZED LAKE VIEW [workspace.lakehouse.schema].MLV_Identifier FULL

Annotazioni

Se il nome dell'area di lavoro contiene spazi, racchiudilo tra apici inversi: `My Workspace`.lakehouse.schema.view_name

Disattivare l'aggiornamento ottimale

Se si vuole che ogni esecuzione pianificata esegua un aggiornamento completo, è possibile disattivare l'interruttore di aggiornamento ottimale. In questo modo vengono disabilitate sia la strategia "no-refresh" che quella "incrementale"; ogni esecuzione ricompila l'intero set di dati, anche se i dati di origine non sono stati modificati.

  1. Vai alla tua lakehouse e seleziona Viste materializzate del lake.

  2. Fare clic su Gestisci e disattivare l'interruttore Aggiornamento ottimale .

    Screenshot che mostra l'interruttore per passare alla modalità di aggiornamento completa.