Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a:✅ Endpoint di analisi SQL in Microsoft Fabric
Questa esercitazione illustra come creare una pipeline di Microsoft Fabric per eseguire la manutenzione intelligente delle tabelle.
Questa soluzione chiama la sys.sp_get_table_health_metrics procedura archiviata T-SQL sull'endpoint di analisi SQL di Lakehouse, valuta il risultato ed esegue OPTIMIZE solo quando la tabella necessita effettivamente di manutenzione. Questo modello "check-then-act" evita costi di elaborazione inutili per le tabelle in buono stato, garantendo al contempo che le tabelle degradate siano sottoposte automaticamente a manutenzione.
Perché è necessaria la manutenzione
Le tabelle Lakehouse possono accumulare troppi file Parquet di piccole dimensioni nel tempo, che danneggiano le prestazioni delle query nell'endpoint di analisi SQL.
Anziché eseguire OPTIMIZE secondo una pianificazione fissa, indipendentemente dallo stato della tabella, questa pipeline prende una decisione basata sui dati: verifica prima lo stato di salute della tabella e attiva l'ottimizzazione solo quando viene rilevata un'anomalia.
Prerequisiti
Prima di iniziare, assicurarsi di avere:
- Un'area di lavoro Microsoft Fabric con autorizzazioni di collaboratore o superiori.
- Una lakehouse in tale area di lavoro contenente almeno una tabella Delta che si vuole monitorare. In questa esercitazione viene usato un lakehouse denominato
SalesDataLakehouse. - Familiarità con le pipeline di dati Fabric.
- Familiarità con i notebook di Fabric.
Struttura della soluzione
La pipeline completata ha la seguente struttura:
-
Attività script: viene eseguita sulla tabella di destinazione e restituisce
sp_get_table_health_metricsle metriche di integrità della tabella come output strutturato. -
attività If Condition: legge
PotentialAnomalyTypedirettamente dall'output dello script e controlla se è maggiore di zero. Per ulteriori informazioni suPotentialAnomalyType, consulta i codici dei tipi di anomalia potenziale. -
Attività del notebook (all'interno del ramo True): esegue
OPTIMIZEsulla tabella da un notebook Spark.
Al termine di questa esercitazione, si avrà un notebook che accetta i parametri dalla pipeline e ottimizza una tabella quando viene attivata.
Passaggio 1: Creare il notebook di ottimizzazione
Il notebook accetta come parametri dalla pipeline il Lakehouse di destinazione, lo schema e il nome della tabella, quindi esegue OPTIMIZE usando Spark SQL.
- Nell'area di lavoro Fabric selezionare + Nuovo elemento>Notebook.
- Assegnare al notebook il nome Optimize-Table.
- In Posizione, seleziona il lakehouse in cui sono archiviate le tabelle selezionate. Questo esercizio usa un Lakehouse chiamato
SalesDataLakehouse. - Fare clic su Crea.
Aggiungere la cella del parametro
La prima cella definisce le variabili di cui la pipeline esegue l'override in fase di esecuzione.
Nella prima cella immettere i parametri seguenti. I valori non sono importanti e la pipeline ne esegue l'override in fase di esecuzione.
# Parameters lakehouse_name = "<LakehouseName>" schema_name = "<SchemaName>" table_name = "<TableName>"Importante
Funzionamento della parametrizzazione nei notebook di Fabric: in fase di esecuzione, Fabric inserisce una nuova cella immediatamente dopo la cella del parametro che riassegna queste variabili con i valori passati dalla pipeline. I valori impostati qui inizializzano solo le variabili e migliorano la leggibilità.
Selezionare il menu cella (...) >Attivare o disattivare la cella del parametro per contrassegnare questa cella come cella di parametro.
Aggiungere la cella OPTIMIZE
Il OPTIMIZE comando è un comando Spark SQL, non un comando T-SQL. È necessario eseguirlo in ambienti Spark, ad esempio notebook, definizioni di processi Spark o l'interfaccia Lakehouse Maintenance. L'endpoint di analisi SQL e l'editor di query SQL warehouse non supportano direttamente questo comando.
Nella seconda cella immettere:
full_name = f"{lakehouse_name}.{schema_name}.{table_name}" print(f"Optimizing {full_name} ...") result = spark.sql(f"OPTIMIZE {full_name}") result.show(truncate=False)Aggiungere celle Markdown in base alle esigenze per documentare correttamente il notebook per altri utenti. Il notebook completato dovrebbe essere simile al seguente:
Note
In questo esempio viene considerato un Lakehouse con schemi abilitati. Modificare di conseguenza il nome in tre parti in full_name se non si usano gli schemi Lakehouse.
Passaggio 2: Creare la pipeline
Nell'area di lavoro di Fabric, seleziona + Nuovo elemento>Pipeline.
Assegna alla pipeline il nome Check-and-Optimize-Table.
Selezionare lo sfondo dell'area di disegno della pipeline e quindi aprire la scheda Parametri . Aggiungere tre parametri:
Name Type Valore predefinito lakehouse_nameStringa SalesDataLakehouseschema_nameStringa dbotable_nameStringa FactSales
Passaggio 3: Aggiungere l'attività Script
L'attività Script viene eseguita sys.sp_get_table_health_metrics nell'endpoint di analisi SQL e acquisisce il risultato.
Importante
Usare l'attività Script, non l'attività Stored procedure. Solo l'attività Script espone il set di risultati come output JSON strutturato che le attività downstream possono analizzare.
- Nella scheda Attività selezionare Script per aggiungerlo nell'area di disegno.
- Assegnale il nome Controllo integrità tabella.
- Nella scheda Impostazioni :
Connessione: selezionare l'endpoint di analisi SQL per Lakehouse. Se non è elencato, selezionare Sfoglia tutto nella parte inferiore dell'elenco a discesa e quindi individuare l'endpoint di analisi SQL di Lakehouse.
Tipo di script: selezionare Query.
Script: selezionare Aggiungi contenuto dinamico e immettere l'espressione seguente:
@concat('EXEC sys.sp_get_table_health_metrics ''', pipeline().parameters.schema_name, '.', pipeline().parameters.table_name, '''')
Questa espressione produce il comando SQL che esegue la stored procedure sulla tabella di destinazione, ad esempio : EXEC sys.sp_get_table_health_metrics 'dbo.FactSales'.
Verificare l'output dello script
Esegui la pipeline una volta ed esamina l'output dell'attività Script. Viene visualizzato un oggetto JSON simile al seguente:
{
"resultSetCount": 1,
"resultSets": [
{
"rowCount": 1,
"rows": [
{
"PotentialAnomalyType": 3,
"PotentialAnomalyDescription": "Too many small files...",
"FileCount": 2688,
"...": "..."
}
]
}
]
}
Importante
Il risultato effettivo può variare in base allo stato della tabella. Il punto è che restituisce le colonne esposte da sys.sp_get_table_health_metrics.
Passaggio 4: Aggiungi l'attività If Condition
L'attività Condizione If legge PotentialAnomalyType direttamente dall'output dell'attività Script e prende una decisione in base al risultato. Seguire questa procedura:
Nella scheda Attività selezionare If Condition (Condizione if ) per aggiungere un'attività nell'area di disegno.
Chiamalo Check Anomaly.
Disegna una freccia Successo (verde) da Verifica integrità tabella a Verifica anomalia.
Nella scheda Attività dell'attività If Condition, imposta Expression su:
@greater(int(activity('Check Table Health').output.resultSets[0].rows[0]['PotentialAnomalyType']), 0)
Questa espressione legge la prima riga restituita da sys.sp_get_table_health_metrics, esegue il cast PotentialAnomalyType a un numero intero e restituisce true quando il valore è maggiore di zero, che indica un'anomalia rilevata nella tabella di destinazione.
Passaggio 5: Aggiungi l'attività Notebook (ramo True)
Con l'attività If Condition selezionata, seleziona Modifica (icona a forma di matita) accanto a True. Il canvas passa a un sottocanvas relativo al ramo True.
Trascina un'attività Notebook nella sotto-area di disegno True.
Chiamalo Run OPTIMIZE.
Nella scheda Impostazioni:
Notebook: selezionare il notebook Optimize-Table creato nel passaggio 1.
Espandere Parametri di base, quindi aggiungere tre righe:
Name Type Value lakehouse_nameStringa @pipeline().parameters.lakehouse_nameschema_nameStringa @pipeline().parameters.schema_nametable_nameStringa @pipeline().parameters.table_name
I tre valori delle colonne dei nomi devono corrispondere esattamente ai nomi delle variabili nella cella del parametro del notebook.
Note
È possibile lasciare vuote le attività False. L'attività If Condition considera un ramo False vuoto come un'operazione nulla e segnala la pipeline come riuscita.
La pipeline completata dovrebbe apparire come segue:
Passaggio 6: Convalidare ed eseguire
Selezionare Convalida sulla barra degli strumenti della pipeline per verificare la presenza di errori di configurazione.
Selezionare Esegui per eseguire manualmente la pipeline.
Monitorate l'esecuzione e confermate:
-
Verificare lo stato della tabella: esaminare l'output generato da questa attività quando viene eseguita. L'output della
sys.sp_get_table_health_metricsstored procedure dovrebbe essere visualizzato in formato JSON. -
Controllare l'anomalia: valuta correttamente leggendo
PotentialAnomalyTypedirettamente dall'output dello script. -
Esegui OPTIMIZE (solo se
PotentialAnomalyType > 0): se l'attività Check Anomaly restituisce True, esamina l'input dell'attività Run OPTIMIZE per verificare che usi i parametri corretti (nome del Lakehouse, schema e nome della tabella) e controlla l'output per esaminare i messaggi dell'operazioneOPTIMIZE.
-
Verificare lo stato della tabella: esaminare l'output generato da questa attività quando viene eseguita. L'output della
Pulire le risorse
Se sono state create risorse solo per questa esercitazione e non sono più necessarie, eliminare gli elementi seguenti dall'area di lavoro:
- La pipeline Check-and-Optimize-Table.
- Il notebook Optimize-Table.