De Bronze a Silver es donde empieza la confianza
Las capas gold se llevan las demos. De bronze a silver es donde realmente se ganan los números.
Bronze es evidencia
Guardalo tal cual llegó, con problemas de encoding y todo. La primera vez que alguien pregunte si un número estaba mal en marzo o solo estaba mal en el reporte, vas a querer el archivo original y no tu versión limpia. El almacenamiento es barato. El arrepentimiento no.
Silver es donde se terminan las discusiones
Acá es donde cust_id, customer_id y CustomerID se vuelven una sola columna con un solo tipo. Donde decidís, una vez, que una fecha de envío nula significa no enviado y no desconocido. Salteate esa decisión y se vuelve a tomar en cada consulta aguas abajo, distinta cada vez.
Casi toda la lógica duplicada que encontré en warehouses arranca en una capa silver que dejó algo ambiguo. Alguien necesitaba una respuesta un viernes, decidió por su cuenta y lo mandó.
Poné los controles donde ocurre el cambio
Prefiero que una corrida falle por un conteo de filas antes que tener un dashboard cuatro por ciento desviado durante una semana sin que nadie se entere. Asertá en la transformación, no después de que un modelo ya consumió la salida. Y dejá la tabla lo bastante simple como para que otro ingeniero la abra y entienda qué va ahí sin agendar una reunión con vos.
# 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")