Skip to content

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.