Funzionamento di Iceberg
Iceberg tiene traccia dei singoli file di dati in una tabella anziché nelle directory. In questo modo, gli scrittori possono creare file di dati sul posto (i file non vengono spostati o modificati). Inoltre, possono aggiungere file alla tabella solo in un commit esplicito. Lo stato della tabella viene mantenuto nei file di metadati. Tutte le modifiche allo stato della tabella creano un nuovo file di metadati e sostituiscono atomicamente i metadati precedenti. Il file di metadati della tabella tiene traccia dello schema della tabella, della configurazione del partizionamento e di altre proprietà.
Include anche istantanee del contenuto della tabella. Ogni snapshot è un insieme completo di file di dati nella tabella in un determinato momento. Gli snapshot sono elencati nel file di metadati, ma i file in uno snapshot vengono archiviati in file manifesti separati. Le transizioni atomiche dal file di metadati di una tabella al successivo forniscono l'isolamento degli snapshot. I lettori utilizzano lo snapshot corrente quando hanno caricato i metadati della tabella. I lettori non sono interessati dalle modifiche finché non eseguono l'aggiornamento e raccolgono una nuova posizione dei metadati. I file di dati negli snapshot vengono archiviati in uno o più file manifesti che contengono una riga per ciascun file di dati nella tabella, i relativi dati di partizione e i relativi parametri. Uno snapshot è l'unione di tutti i file nei suoi manifesti. I file manifesti possono anche essere condivisi tra le istantanee per evitare di riscrivere i metadati che cambiano lentamente.
Diagramma degli snapshot di Iceberg

Iceberg offre le seguenti funzionalità:
-
Supporta le transazioni ACID e i viaggi nel tempo nel tuo data lake Amazon S3.
-
I tentativi di commit beneficiano dei vantaggi prestazionali di concorrenza ottimistica
. -
La risoluzione dei conflitti a livello di file comporta un'elevata concorrenza.
-
Con le statistiche minima e massima per colonna nei metadati puoi ignorare i file, aumentando le prestazioni per le query selettive.
-
Puoi organizzare le tabelle in layout di partizioni flessibili con l'evoluzione delle partizioni che consente di aggiornare gli schemi di partizioni. Le query e i volumi di dati possono quindi cambiare senza fare affidamento su directory fisiche.
-
Supporta l'applicazione e l'evoluzione dello schema
. -
Le tabelle Iceberg fungono da dissipatori idempotenti e fonti riproducibili. Ciò consente lo streaming e il supporto batch con pipeline di elaborazione singola. I dissipatori idempotenti tengono traccia delle operazioni di scrittura che hanno avuto successo in passato. Pertanto, il dissipatore può richiedere nuovamente i dati in caso di errore ed eliminarli se sono stati inviati più volte.
-
Cronologia e derivazione sono visibili, comprendendo l'evoluzione della tabella, la cronologia delle operazioni e le statistiche per ogni commit.
-
Migrazione da un set di dati esistente con una scelta di formato di dati (Parquet, ORC, Avro) e motore di analisi (Spark, Trino, PrestoDB, Flink, Hive).