Iceberg en Nessie maken datawijzigingen veiliger

Git gaf applicatieteams een manier om iets te proberen zonder main te breken. Datateams hebben lang op het equivalent gewacht.

Ik draai Iceberg met Nessie als catalogus nu al een tijd. Wat mij overtuigde was niet time travel of het bestandsformaat. Het was kunnen zeggen probeer het op een branch en dat ook echt menen.

Branches zijn het hele punt

Schemawijziging, backfill, een partitieschema waar je niet zeker van bent: doe het op een branch, richt een testjob op die branch en kijk wat eruit komt. Stroomafwaarts merkt niemand iets tot je merget. Het alternatief was vroeger een volledige kopie van de tabel, of een heel voorzichtige WHERE en een nacht slaap die je toch niet ging krijgen.

-- Spark SQL with the Nessie extensions enabled.
CREATE BRANCH IF NOT EXISTS backfill_orders IN nessie FROM main;
USE REFERENCE backfill_orders IN nessie;

-- Run the backfill here. Nobody reading main sees any of it.
INSERT OVERWRITE nessie.sales.orders
SELECT * FROM nessie.staging.orders_backfill;

-- Compare, check the downstream reads, then promote.
MERGE BRANCH backfill_orders INTO main IN nessie;

-- When someone says the numbers changed:
SELECT snapshot_id, committed_at, operation
FROM nessie.sales.orders.snapshots
ORDER BY committed_at DESC;
Illustratief voorbeeld, geen productiecode.

Snapshots maken van discussies diffs

Als iemand zegt dat de cijfers veranderd zijn, vergelijk je snapshot 4 met snapshot 5 in plaats van te reconstrueren wat de pipeline afgelopen dinsdag deed. db.table.snapshots opvragen duurt twee seconden en heeft me een paar lange gesprekken bespaard.

Promoveren hoort onopvallend te zijn

Merge de branch, controleer of de stroomafwaartse reads nog werken en bewaar het vorige snapshot-id ergens waar je het snel terugvindt. Als een release een runbook nodig heeft en twee mensen die naar een dashboard staren, heeft de branch zijn werk niet gedaan.

Het loont waar dingen vaak veranderen

De opzet is het waard zolang contracten nog bewegen, tabellen blijven evolueren of er elke maand nieuwe consumers bijkomen. Bij een tabel die al drie jaar dezelfde zes kolommen heeft is het vooral overhead. Niet alles heeft een versiebeheerde catalogus nodig, en doen alsof van wel is precies hoe platforms zwaar worden.