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 si applica solo quando sono soddisfatte entrambe le condizioni seguenti:

  • I dati di origine sono di sola accodamento per il ciclo di aggiornamento. Se un ciclo di aggiornamento rileva eliminazioni o aggiornamenti in una tabella di origine, il motore esegue il fallback all'aggiornamento completo, anche quando CDF è abilitato e la query usa solo costrutti SQL supportati. Per ulteriori dettagli, vedere Aggiornamento incrementale e dati solo in append.
  • Il feed di dati delle modifiche differenziale (CDF) è abilitato (delta.enableChangeDataFeed=true) in tutte le tabelle di origine a cui viene fatto riferimento nella definizione di vista lake materializzata. Senza CDF, 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.

Aggiornamento incrementale e dati di sola aggiunta

Attualmente, l'aggiornamento incrementale si applica solo quando i dati di origine vengono aggiunti solo tra gli aggiornamenti. Se una tabella di origine registra un'eliminazione o un aggiornamento, Fabric torna al refresh completo, anche con CDF abilitata e una query che utilizza esclusivamente costrutti SQL supportati.

Il motore richiede un modo affidabile per identificare le righe eliminate. Per migliorare l'efficienza, gli utenti possono ora fornire suggerimenti per l'aggiornamento. Stiamo pilotando questa operazione con clienti selezionati.

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.

Suggerimento

Per identificare le opportunità di ottimizzazione degli aggiornamenti, Fabric visualizza un banner che elenca le viste lake materializzate idonee per l'aggiornamento incrementale, ma bloccate perché CDF non è abilitato in una o più tabelle di origine. Il banner viene visualizzato nella vista della derivazione, nei dettagli di esecuzioni recenti e a livello di singolo nodo, in modo da poter individuare la lacuna da qualsiasi punto di accesso utilizzato.

Screenshot che mostra il banner Salva aggiornamento e costo nella pagina Visualizzazioni Lake materializzate con il pulsante Attiva CDF.

Per abilitare CDF direttamente dal banner:

  1. Nel banner selezionare Attiva CDF.

  2. Nella finestra di dialogo Abilita feed di dati delle modifiche esaminare l'elenco di viste lake materializzate e le tabelle di origine in cui verrà abilitato CDF.

    Schermata della finestra di dialogo Abilita Change Data Feed che elenca le viste lake materializzate e le tabelle di origine in cui verrà abilitato CDF.

  3. Seleziona Abilita. L'aggiornamento successivo riflette lo stato aggiornato di CDF.

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. Le funzioni non deterministiche, ad rand()esempio , uuid()e current_timestamp() non sono supportate. DISTINCT e le funzioni finestra non sono supportate.
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.
GROUP BY / aggregazioni Supportato con condizioni. L'uso di aggregazioni (AVG(), MIN(), MAX(), STDDEV()e così via) richiede che ogni tabella di origine sia partizionata e che la GROUP BY colonna di partizione sia inclusa nella clausola della query MLV. Ciò consente di Fabric ricompilare in modo incrementale solo le partizioni interessate. SUM() e COUNT() (senza DISTINCT) sono un caso speciale: supportano l'aggiornamento incrementale senza il requisito di partizionamento.
Combinare altre funzioni di aggregazione con SUM()/COUNT() nella stessa query, ad esempio SELECT SUM(amount), AVG(price) ..., richiede che la condizione di partizionamento sia soddisfatta per l'intera query; in caso contrario, Fabric ripiega sull'aggiornamento completo. GROUP BY le colonne devono comparire nell'elenco SELECT.
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.