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.
Questo articolo fornisce consigli per la conversione di un data lake Parquet esistente in Delta Lake. Delta Lake è il formato sottostante del lakehouse di Databricks. Vedere Che cos'è Delta Lake in Azure Databricks?.
Considerazioni prima della conversione in Delta Lake
Il data lake Parquet ha probabilmente una strategia di partizionamento ottimizzata per i carichi di lavoro e i sistemi esistenti. Anche se è possibile eseguire la conversione in Delta Lake e mantenere questa struttura di partizionamento, le tabelle sovra partizionate sono uno dei principali responsabili che causano carichi di lavoro lenti in Delta Lake. Consultare Quando eseguire il partizionamento delle tabelle su Azure Databricks e linee guida per adattare il codice Spark a Databricks.
È anche necessario considerare se i dati convertiti sono ancora in crescita, nonché la frequenza con cui i dati vengono attualmente sottoposti a query. Potresti scegliere approcci diversi per tabelle Parquet diverse nel tuo data lake.
Approcci alla conversione Delta Lake
La matrice seguente presenta i quattro approcci principali per la conversione di un data lake Parquet in Delta Lake e alcuni dei compromessi. Per chiarire ogni colonna:
- Incrementale: indica la funzionalità che supporta la conversione di dati aggiuntivi aggiunti all'origine di conversione dopo l'avvio della conversione.
- Duplica i dati: indica se i dati vengono scritti in una nuova posizione o modificati sul posto.
- Gestisce la struttura dei dati: indica se la strategia di partizionamento viene mantenuta durante la conversione.
- Dati di backfill: indica la funzionalità che supporta il riempimento dei dati aggiunti all'origine di conversione dopo l'avvio della conversione.
- Facilità d'uso: indica il livello di impegno dell'utente per configurare ed eseguire la conversione dei dati.
metodo | Incrementale | Duplica i dati | Mantiene la struttura dei dati | Riempimento dati | Semplicità d'uso |
---|---|---|---|---|---|
Parquet profondo CLONE |
Sì | Sì | Sì | Sì | Facile |
Parquet sottile CLONE |
Sì | NO | Sì | Sì | Facile |
CONVERT TO DELTA |
NO | NO | Sì | NO | Facile |
Caricatore automatico | Sì | Sì | NO | Facoltativo | Alcune configurazioni |
Processo Batch Spark | Logica personalizzata | Sì | NO | Logica personalizzata | Logica personalizzata |
Le sezioni seguenti illustrano in modo più approfondito ognuna di queste opzioni.
Eseguire la migrazione dei dati Parquet con CLONE
Parquet
È possibile usare CLONE
Parquet per copiare in modo incrementale i dati da un data lake Parquet a Delta Lake. I cloni superficiali creano puntatori ai file Parquet esistenti, mantenendo la tua tabella Parquet nella sua posizione e nel formato originale, fornendo un accesso ottimizzato attraverso le statistiche dei file raccolte. È possibile scrivere nella tabella creata da un clone superficiale senza alterare l'origine dei dati originale.
La clonazione profonda copia tutti i file di dati dall'origine in una nuova posizione durante la conversione in Delta Lake. Il clone avanzato consente di rilevare in modo incrementale nuovi file, incluse le operazioni di backfill, durante l'esecuzione successiva della logica. Vedere Clonare in modo incrementale tabelle Parquet e Apache Iceberg in Delta Lake.
L'esempio seguente illustra l'uso di CLONE
:
CREATE OR REPLACE TABLE <target-table-name> [SHALLOW] CLONE parquet.`/path/to/data`;
Eseguire la migrazione dei dati Parquet con CONVERT TO DELTA
È possibile usare CONVERT TO DELTA
per trasformare una directory di file Parquet in una tabella Delta con un singolo comando. Dopo aver convertito una tabella in Delta Lake, è necessario smettere di leggere e scrivere dalla tabella utilizzando la logica Parquet. I dati scritti nella directory di destinazione dopo l'avvio della conversione potrebbero non riflettersi nella tabella Delta risultante. Vedere Converti in Delta Lake.
L'esempio seguente illustra l'uso di CONVERT TO DELTA
:
CONVERT TO DELTA parquet.`abfss://container@storageAccount.dfs.core.windows.net/parquet-data`;
Eseguire la migrazione dei dati Parquet con Auto Loader
Anche se il caricatore automatico è un prodotto progettato per l'inserimento incrementale di dati dall'archiviazione di oggetti cloud, è possibile sfruttarlo per implementare un modello che copia in modo incrementale tutti i dati da una determinata directory a una tabella di destinazione. Vedere Che cos'è l’Autoloader?.
L'esempio di codice seguente include configurazioni che:
- Elaborare tutti i file esistenti nella directory di origine.
- Attivare un processo di backfill settimanale automatico per acquisire i file che potrebbero non essere stati rilevati.
- Consentire ad Apache Spark di usare molti processi Spark per evitare errori di perdita e memoria insufficiente associati a partizioni di dati di grandi dimensioni.
- Fornire garanzie di elaborazione dall'inizio alla fine esattamente una volta.
(spark.readStream
.format("cloudFiles")
.option("cloudFiles.format", "parquet")
.option("cloudFiles.includeExistingFiles", "true")
.option("cloudFiles.backfillInterval", "1 week")
.option("cloudFiles.schemaLocation", checkpoint_path)
.load(file_path)
.writeStream
.option("checkpointLocation", checkpoint_path)
.trigger(availableNow=True)
.toTable(table_name)
)
È possibile usare il caricatore automatico nelle pipeline dichiarative di Lakeflow con Python o SQL:
Eseguire la migrazione di dati Parquet con logica batch Apache Spark personalizzata
La scrittura di logica Apache Spark personalizzata offre una grande flessibilità nel controllo di come e quando viene eseguita la migrazione di dati diversi dal sistema di origine, ma potrebbe richiedere una configurazione completa per fornire funzionalità integrate in altri approcci.
Al centro di questo approccio è una semplice operazione di lettura e scrittura di Apache Spark, ad esempio:
spark.read.format("parquet").load(file_path).write.mode("append").saveAsTable(table_name)
Per eseguire il backfill o la migrazione incrementale, potrebbe essere possibile basarsi sulla struttura di partizionamento dell'origine dati, ma potrebbe anche essere necessario scrivere logica personalizzata per tenere traccia dei file aggiunti dopo l'ultimo caricamento dei dati dall'origine. Sebbene sia possibile usare Delta Lake funzionalità di merge per evitare la scrittura di record duplicati, il confronto di tutti i record di una tabella di origine Parquet di grandi dimensioni con il contenuto di una tabella Delta di grandi dimensioni è un'attività di calcolo costosa.
Quando non è consigliabile eseguire la conversione in Delta Lake?
Prima di convertire tutti i dati Parquet esistenti in Delta Lake, probabilmente prenderai in considerazione potenziali compromessi.
Azure Databricks progetta molte funzionalità ottimizzate della lakehouse intorno a Delta Lake e Delta Lake offre un ricco ecosistema open source con connettori nativi per molti linguaggi e sistemi dati aziendali. Delta Sharing consente di condividere i dati archiviati in Delta Lake con altri client.
Delta Lake si basa su Parquet e, di conseguenza, Azure Databricks offre anche lettori e writer ottimizzati per l'interazione con i file Parquet.
Databricks consiglia di usare Delta Lake per tutte le tabelle che ricevono aggiornamenti o query regolari da Azure Databricks. È possibile scegliere di gestire i dati in formato Parquet in alcuni casi, ad esempio:
- Un sistema upstream che scrive dati in Parquet non supporta la scrittura nativa in Delta Lake.
- Un sistema downstream che legge i dati Parquet non può leggere Delta Lake.
In entrambi questi casi, è possibile copiare le tabelle su Delta Lake per sfruttare i vantaggi delle prestazioni durante la lettura, la scrittura, l'aggiornamento e l'eliminazione di record nelle tabelle.