Silver — Data Quality & Limpeza
A camada SILVER implementa as regras de Data Quality (DQ) e padronização dos dados brutos do BRONZE.
Posição no pipeline
flowchart LR
BR[Bronze Delta] --> SV[Silver DQ]
SV --> GD[Gold dimensional]
Processo de Data Quality
Cada tabela do BRONZE passa pelas seguintes transformações:
1. Remoção de Duplicatas
Remove registros duplicados baseados na chave primária de cada tabela.
pk_col = colunas_criticas[0]
df_dedup = df.dropDuplicates([pk_col])
df = df_dedup
2. Remoção de Nulos Críticos
Remove linhas contendo valores NULL em colunas críticas (PKs e FKs), pois são incompatíveis com o modelo dimensional. Trecho real do notebook notebooks/02_bronze_to_silver/silver.py:
COLUNAS_CRITICAS = {
"categoria": ["id_categoria"],
"autor": ["id_autor"],
"livro": ["id_livro", "id_categoria", "id_autor"],
"membro": ["id_membro"],
"emprestimo": ["id_emprestimo", "id_livro", "id_membro"],
"multa": ["id_multa", "id_emprestimo"],
}
for col in colunas_criticas:
if col in df.columns:
df = df.filter(F.col(col).isNotNull())
| Tabela | Colunas Críticas | Motivo |
|---|---|---|
| categoria | id_categoria | Chave primária |
| autor | id_autor | Chave primária |
| livro | id_livro, id_categoria, id_autor | Chave primária e FKs |
| membro | id_membro | Chave primária |
| emprestimo | id_emprestimo, id_livro, id_membro | Chave primária e FKs |
| multa | id_multa, id_emprestimo | Chave primária e FK |
3. Padronização de Strings
Aplica trim e uppercase em colunas de texto definidas por tabela no mesmo notebook.
df = df.withColumn(
col,
F.when(
F.col(col).isNotNull(),
F.trim(F.upper(F.col(col)))
).otherwise(None)
)
4. Conversão de Tipos de Data
Garante que todas as colunas de data estejam como DateType.
df = df.withColumn(col, F.col(col).cast(DateType()))
5. Remoção de Metadados Bronze
Descarta as colunas de auditoria do BRONZE (_bronze_loaded_at, _bronze_source_table).
6. Adição de Metadados Silver
Adiciona coluna de auditoria com timestamp de processamento.
df = df.withColumn("dt_processamento", F.lit(dt_processamento).cast(TimestampType()))
Notebook: notebooks/02_bronze_to_silver/silver.py
O notebook Silver implementa regras de DQ de forma reutilizável através da função aplicar_data_quality, grava tabelas no schema SILVER em Delta com overwrite e valida contagens e schemas ao final.
Automação
Em produção didática, esta etapa é acionada como task de um Databricks Job, dependendo da conclusão da ingestão Bronze. Assim, o pipeline permanece ordenado, repetível e observável no painel de Workflows. Detalhes em Jobs & Pipelines.