Dez questões
Sobre o material lido, com a distribuição das respostas comentada.
Determinismo, testes que falham antes da transformação existir e estratégias de carga coerentes com a política de histórico, aplicados à silver e à gold do lakehouse construído nas aulas anteriores.
Computação 2 · Prof. Afonso Brandão · 10/09/2026
Continuidade · da Aula 12 para a Aula 13
A Aula 12 garantiu que o dado entra com completude e possibilidade de replay. Esta aula trata do que acontece entre a bronze e a métrica que o negócio lê.
Roteiro · 120 minutos · trinta de quiz, quarenta de exposição e cinquenta de prática
O resultado do quiz por tema dirige a ênfase da exposição. Os cinquenta minutos finais são atividade em grupo: escrever os testes antes da transformação, construir a silver e a gold e provar que a carga é repetível.
Sobre o material lido, com a distribuição das respostas comentada.
Onde transformar, e o que torna a transformação reproduzível.
Testes que falham antes, deduplicação e reconciliação com a origem.
Append, overwrite, merge e snapshot; histórico, atomicidade e dependência.
Silver e gold com testes escritos antes, e carga repetível.
Bloco 1 · Onde transformar
A diferença relevante reside na versão do dado que permanece disponível quando a regra de negócio muda.
O dado chega ao destino já conformado. Economiza armazenamento e processamento no destino, e permite mascarar dado sensível antes de ele cruzar a fronteira.
Custo: o bruto não é preservado. Quando a regra muda, o passado não pode ser recalculado, e a série histórica passa a misturar dois critérios.
A bronze guarda o dado como veio, e a transformação roda sobre ela. A mudança de regra se aplica retroativamente, porque a entrada continua disponível.
Custo: armazenamento e processamento no destino, e a necessidade de decidir onde o dado sensível pode legalmente ser processado.
Bloco 1 · Determinismo
Quatro construções quebram essa propriedade: data corrente, ordenação parcial, aleatoriedade e dependência da ordem física dos arquivos. As duas primeiras aparecem abaixo, com a correção de cada uma.
WHERE data >= current_date - 30
O mesmo backfill executado em duas semanas distintas devolve conjuntos diferentes. A janela precisa ser parâmetro de entrada.
WHERE data BETWEEN :inicio AND :fim
A execução se torna reproduzível, e o registro do parâmetro permite repetir exatamente o mesmo cálculo.
row_number() OVER (PARTITION BY id)
Sem cláusula de ordenação, o registro vencedor varia entre execuções conforme o plano escolhido pelo motor.
ORDER BY atualizado_em DESC, id ASC
O segundo critério resolve o empate do primeiro, e o resultado passa a ser idêntico em toda execução.
Fixe timezone e arredondamento de forma explícita, e documente o critério adotado.
Versione o código e registre, em cada carga, a versão que a produziu.
Bloco 1 · Decisões silenciosas
As quatro alteram o valor sem produzir erro, e o critério adotado permanece invisível ao negócio quando não é registrado.
| Decisão | Alternativas plausíveis | Efeito no resultado | Onde registrar |
|---|---|---|---|
| Fuso horário | Hora da origem, UTC ou hora local do analista | Vendas migram entre dias e o fechamento mensal muda | Contrato da camada gold |
| Nulo em medida | Tratar como zero, ignorar na média ou rejeitar a linha | A média muda de valor conforme a escolha | Teste de qualidade declarado |
| Arredondamento | Arredondar por linha, ou somar e arredondar no fim | Divergência de centavos que se acumula no total | Definição da métrica |
| Junção sem correspondência | Junção interna, externa, ou externa com membro desconhecido | Linhas de fato desaparecem sem que ninguém perceba | Decisão de arquitetura registrada |
Bloco 2 · Qualidade
A falha inicial constitui a única evidência de que o teste é capaz de detectar o defeito que declara verificar.
Schema: colunas, tipos e obrigatoriedade conforme o contrato.
Unicidade da chave declarada em cada camada.
Relacionamento: todo fato encontra a dimensão correspondente.
Faixa de valores e domínio aceito para cada campo categórico.
Atualidade e volume: variação em relação à carga anterior.
Bloco 2 · Deduplicação
A escolha do registro vencedor é decisão de negócio. Delegá-la ao motor produz resultado que muda entre execuções.
O carimbo de chegada reflete a ordem em que o pipeline processou, e não a ordem em que os fatos ocorreram. Sob reprocessamento, a segunda ordem se inverte e o registro vencedor muda.
Registre em cada execução o número de duplicatas removidas. O crescimento súbito desse número sinaliza mudança de comportamento na origem, antes que ela apareça no relatório.
Bloco 2 · Reconciliação
Os testes técnicos garantem consistência interna. A reconciliação garante que o número do painel corresponde ao número do sistema de origem.
Compare, por mês, a contagem na origem com a da camada de consumo. A diferença precisa ser explicada por regra declarada, como o filtro de status.
A contagem pode coincidir e o valor divergir, por arredondamento ou por linhas com medida nula. A soma é o segundo eixo obrigatório da conferência.
Alguma divergência é esperada por diferença de fuso e de janela. A divergência é aceitável quando o limite está declarado previamente como número.
Bloco 3 · Carga
Quatro estratégias, com garantias e custos distintos. A escolha decorre de quanto do passado precisa permanecer consultável.
Acrescenta linhas sem tocar no que existe. Simples e barato.
Substitui a partição inteira pelo resultado recalculado.
Atualiza o que existe e insere o que é novo, por chave.
Grava o estado completo por data e preserva cada versão.
Bloco 3 · Histórico
Retomada da modelagem das Aulas 2 a 4, agora do ponto de vista de quem escreve a carga.
| Política | O que acontece na mudança | Pergunta que passa a ser respondível | Carga correspondente |
|---|---|---|---|
| Sobrescrita | O atributo é substituído e o valor anterior se perde | Qual é o estado atual do cadastro | Merge por chave natural |
| Nova versão | A linha anterior é encerrada e uma nova é aberta com vigência | Qual era o estado na data do fato | Merge com encerramento da versão vigente |
| Atributo anterior | O valor anterior é preservado em coluna própria | Qual era o valor imediatamente anterior | Merge com cópia do valor antes da atualização |
| Instantâneo diário | O cadastro inteiro é gravado a cada dia | Como o cadastro estava em qualquer data | Append particionado por data do instantâneo |
Bloco 3 · Orquestração
O agendamento fixo pressupõe que a tarefa anterior sempre termina no tempo previsto, e essa premissa falha exatamente nos dias de maior volume.
O grafo de dependências torna explícito o que precisa existir antes de cada etapa. Quando a extração atrasa, a transformação aguarda em vez de processar dado incompleto.
Consequência: o atraso se propaga de forma visível, e o alerta indica a etapa que o originou.
Habilitar retry sobre carga não idempotente multiplica o defeito. O backfill de um período longo precisa ser parametrizado por janela e executado em lotes verificáveis.
Consequência: o procedimento de recuperação é testado fora de incidente.
Promova entre ambientes com o mesmo código e parâmetros distintos.
Registre a linhagem: de quais tabelas cada saída deriva, e por qual versão do código.
Defina o acordo de nível de serviço da carga e alerte pelo descumprimento, não pela falha isolada.
Card de trabalho em sala · 50 minutos
Em grupo, sobre a bronze da Aula 12: escrever os testes primeiro, construir silver e gold e provar que a carga é repetível.
Registre a saída do teste antes e depois da implementação. A primeira falha constitui a prova de que ele detecta o defeito.
Compare a contagem do fato antes e depois de cada junção, e explique a diferença por regra declarada.
Execute a carga duas vezes com os mesmos parâmetros e compare a soma da receita, além da contagem.
Card de trabalho · Testes · 8 minutos
Todos rodam contra tabelas ainda inexistentes e devem falhar. Essa falha é o primeiro registro de evidência do encontro.
Card de trabalho · Silver · 12 minutos
O contrato da camada é a conformidade, e o que não o satisfaz é separado em tabela própria, com o motivo registrado.
Card de trabalho · Gold · 12 minutos
A junção interna descarta o fato sem dimensão correspondente sem emitir aviso, e o total apurado cai sem explicação visível.
Card de trabalho · Carga · 9 minutos
O overwrite por partição é a estratégia mais simples quando a partição pode ser recomposta por completo a partir da silver. O COPY sobre Parquet não é atômico, e a publicação atômica exige a troca de ponteiro da Aula 10.
O início e o fim são parâmetros da execução, independentes da data corrente, o que torna o backfill reproduzível meses depois.
Após a recomposição, a soma do período coincide com a anterior, exceto pelas correções que a janela deveria capturar.
Card de trabalho · Conferência · 9 minutos
Números esperados em cada etapa, sobre a bronze de pedidos e itens construída nas aulas anteriores.
| Etapa | O que verificar | Referência |
|---|---|---|
| Testes iniciais | Saída dos cinco testes antes da implementação | Todos falham, por tabela inexistente |
| Silver | Conformada mais rejeitados mais duplicatas | Soma igual à contagem da bronze, sem resíduo |
| Junção com pedido | Itens antes e depois da junção | 112 650 itens, e a queda decorre apenas do status |
| Fato entregue | Linhas após o filtro de entregues | Ordem de 110 mil itens |
| Testes finais | Saída dos cinco testes após a implementação | Todos devolvem zero |
| Repetição | Soma da receita em duas execuções seguidas | Idêntica até o centavo |
Card de trabalho · Uso de IA · em paralelo
O assistente é mais útil na crítica do próprio resultado do que na geração, porque o defeito de transformação é plausível e silencioso.
"A partir deste contrato de camada, escreva os testes de schema, unicidade, relacionamento e faixa que devem falhar enquanto a tabela não existir."
"Escreva a silver com tipos declarados, deduplicação por chave natural com ordenação total, e a separação dos rejeitados com o motivo registrado."
"Aponte, neste SQL, o que muda de resultado entre duas execuções, qual junção pode perder ou duplicar linhas e onde a data corrente torna o backfill irreproduzível."
Verifique se a função de janela declara ordenação total, além da partição.
Procure por data corrente e por funções aleatórias dentro da transformação.
Confirme a contagem antes e depois de cada junção que o assistente propôs.
Ponte com a Aula 1 · Spec-Driven Development
A decisão de transformação entra no projeto como requisito, decisão registrada e critério verificável.
Publicar a receita entregue por mês e por categoria, com definição única aplicada a toda a série histórica.
Divergência de reconciliação com a origem até 0,1% por mês; carga determinística sob mesmos parâmetros; backfill de 24 meses executável em lotes verificáveis.
ELT com bronze preservada, em vez de transformação anterior à gravação. Contexto: a definição de receita líquida ainda está em discussão com o parceiro. Consequência: custo de armazenamento e de processamento no destino.
Dado o mês de agosto de 2018 já publicado, quando executo a carga novamente com os mesmos parâmetros, então a soma da receita permanece idêntica e os cinco testes devolvem zero.
Entrega do card de trabalho
O que o grupo entrega ao final do card de trabalho, e o que será conferido.
O SQL das duas camadas e dos cinco testes; a saída dos testes antes e depois da implementação; as contagens medidas em cada junção; e a definição da métrica de receita declarada por escrito.
Os cinco testes falharam antes da implementação, com a saída registrada.
A silver tem tipos declarados, chave única e rejeitados separados com motivo.
Toda linha da bronze tem destino conhecido: conformada, rejeitada ou deduplicada.
A contagem antes e depois de cada junção está medida e a diferença explicada.
A janela da carga é parâmetro externo, sem data corrente dentro da transformação.
Duas execuções seguidas produzem a mesma soma de receita, até o centavo.
A definição da métrica de receita está declarada, com fuso, arredondamento e tratamento de nulo.
Autoestudos · antes do próximo encontro
O que garante que o número publicado hoje seja o mesmo número quando recalculado daqui a um ano?
Compare a tipologia de testes da ferramenta com os cinco escritos em aula, e identifique qual deles o pipeline do grupo ainda não executa.
getdbt.com · documentação Referência técnicaPercorra o catálogo e conte quantas verificações tratam de distribuição e quantas tratam de schema. Anote duas aplicáveis ao projeto do parceiro.
greatexpectations.io · catálogo DocumentaçãoEstude a cláusula usada na deduplicação do laboratório e escreva a mesma consulta sem ela, comparando legibilidade e desempenho.
duckdb.org · documentaçãoAula 13 · Síntese
Transformação e Carga · 10/09/2026 · Prof. Afonso
Escrever uma transformação determinística, especificar testes de qualidade que falham antes de a transformação existir e escolher a estratégia de carga coerente com a política de histórico da tabela, provando a repetibilidade por soma de receita idêntica entre execuções.
Quiz de abertura com dez questões sobre o material de leitura, cujo resultado por tema dirige a ênfase da exposição. Exposição dialogada em três blocos, cada um encerrado por checklist de aplicação e erro comum. Card de trabalho em grupo nos cinquenta minutos finais: sobre a bronze construída na Aula 12, os estudantes escrevem cinco testes de qualidade e os veem falhar, constroem a silver conformada com rejeitados separados por motivo, montam a gold medindo a contagem antes e depois de cada junção e provam que duas execuções da carga produzem a mesma soma de receita.