Van bronze naar silver begint vertrouwen

Gold-lagen krijgen de demo's. Van bronze naar silver verdien je de cijfers echt.

Bronze is bewijs

Bewaar het precies zoals het binnenkwam, encodingproblemen incluis. De eerste keer dat iemand vraagt of een getal in maart al fout was of pas in het rapport, wil je het originele bestand en niet jouw opgeschoonde versie ervan. Opslag is goedkoop. Spijt niet.

In silver eindigen de discussies

Hier worden cust_id, customer_id en CustomerID één kolom met één type. Hier beslis je, één keer, dat een lege verzenddatum niet verzonden betekent en niet onbekend. Sla die beslissing over en hij wordt opnieuw genomen in elke query stroomafwaarts, elke keer anders.

Bijna alle dubbele logica die ik in warehouses tegenkwam begon bij een silver-laag die iets dubbelzinnig liet. Iemand had op een vrijdag een antwoord nodig, koos zelf iets en leverde het op.

Zet de checks waar de wijziging gebeurt

Ik heb liever dat een run faalt op een rijtelling dan dat een dashboard een week lang stilletjes vier procent verkeerd staat. Assert bij de transformatie, niet nadat een model de output al gebruikt heeft. En houd de tabel eenvoudig genoeg dat een andere engineer hem kan openen en kan uitvogelen wat er hoort zonder eerst tijd met jou te boeken.

# Inside the bronze -> silver job, before anything is written.
bronze_rows = bronze_df.count()
silver_rows = silver_df.count()
dropped = bronze_rows - silver_rows

if dropped > bronze_rows * 0.01:
    raise ValueError(
        f"orders_silver would drop {dropped} of {bronze_rows} rows (limit is 1%). "
        "Look at the dedup keys before rerunning."
    )

silver_df.write.mode("overwrite").saveAsTable("silver.orders")
Illustratief voorbeeld, geen productiecode.