Innocent Innocent - Innocent Strawberries Bananas & Apples Fruit Smoothie 750ml | One Stop
Innocent Strawberries Bananas & Apples Fruit Smoothie 750ml | One Stop

O que é e como funciona o innocent innocent

O termo innocent innocent se refere a um projeto open-source voltado para automação de testes de integridade em pipelines de dados, originalmente criado por um grupo pequeno de engenheiros na Europa. A ideia central é permitir que times verifiquem se os dados que estão sendo injetados em um banco ou data lake não violam regras de qualidade básicas sem precisar escrever scripts customizados do zero. O repositório principal está hospedado no GitHub e recebe atualizações esporádicas, geralmente ligadas a mudanças nas versões dos principais motores de consulta.

Por que o nome innocent innocent?

O nome surgiu como uma brincadeira interna entre os desenvolvedores durante um hackathon. Nenhum deles teve participação relevante depois da versão 0.8, mas o nome ficou. Não há significado técnico por trás. Se você ver algum material de marketing usando isso como argumento de venda, desconfie. A instalação básica funciona assim: você baixa o binário correspondente à sua plataforma, configura um arquivo YAML com as regras de validação e executa o comando de teste contra a conexão do seu banco. O processo leva cerca de cinco a dez minutos na primeira configuração, dependendo de quão familiarizado você está com a sintaxe do arquivo de configuração. Depois disso, cada execução leva entre dois e quatro segundos em um pipeline padrão de dez tabelas.

Configuração prática

O arquivo de configuração usa a extensão .yaml e segue uma estrutura simples. Você define a conexão com o banco na raiz, depois lista as regras sob a chave rules. Cada regra tem um nome, um tipo de validação e os parâmetros necessários. Os tipos mais usados são not_null, unique, min_max, e regex_match. Existem também tipos mais específicos como schema_match e referential_integrity, mas estes últimos exigem que o motor de destino suporte certas funcionalidades que nem todos os bancos oferecem. Aqui está um exemplo mínimo que funciona na maioria dos casos:

connection: driver: postgres host: localhost port: 5432 database: analytics user: readonly password: env(DB_PASSWORD) rules: - name: user_id_not_null type: not_null table: users column: id - name: email_unique type: unique table: users column: email - name: age_range type: min_max table: users column: age min: 0 max: 120 Salve isso como innocent_innocent.yaml e rode o comando de validação apontando para o arquivo. Se tudo estiver configurado corretamente, o retorno será uma tabela simples mostrando quantas linhas passaram e quantas falharam em cada regra.

👉 Clique no botão abaixo para saber mais sobre o assunto!

Um problema real que eu encontrei

Num projeto recente, precisei rodar o innocent innocent contra um banco PostgreSQL que tinha colunas do tipo JSONB com schemas internos variados. A regra regex_match simplesmente não conseguia validar o conteúdo dentro do JSON porque o driver de parser nativo do projeto não lida bem com chaves aninhadas profundas. O resultado era falsos positivos massivos — basicamente todas as linhas falhavam porque o regex tentava fazer match em strings brute sem contexto estrutural. A solução que encontrei foi criar uma view no banco que expunha os campos que eu precisava validar como colunas normais, e então apontar as regras do innocent innocent para essa view em vez da tabela original. Funcionou perfeitamente. Não é elegante, mas resolve o problema sem precisar modificar o código-fonte do projeto.

O que ninguém te conta sobre o innocent innocent

Primeiro: ele não escala bem para datasets acima de cinquenta milhões de linhas em máquinas com menos de 16GB de RAM. O motor carrega fragments inteiros na memória antes de processar. Se você tiver esse cenário, use a opção --streaming que reduz o consumo, mas dobra o tempo de execução. Segundo: a documentação oficial não menciona que regras do tipo schema_match só funcionam corretamente com Postgres e Snowflake. Em MySQL e BigQuery, o comportamento é inconsistente e pode passar validações que na verdade falharam silenciosamente. Eu descobri isso depois de perder duas horas investigando por que um pipeline que passava localmente quebrava em produção.

Terceiro: o projeto não tem um sistema de cache interno. Cada execução roda todas as regras do zero. Se você tem cinquenta regras e roda o teste a cada commit, saiba que isso vai adicionar tempo significativo ao seu pipeline. A alternativa prática é usar o flag --only-changed que compara com o resultado da última execução e roda apenas as regras afetadas por mudanças no esquema. Economiza cerca de sessenta a setenta por cento do tempo em pipelines estáveis.

Downloads e onde encontrar

O repositório oficial fica em github.com/innocent-innocent/innocent-innocent. Os binários pré-compilados estão na aba Releases. Para Linux amd64, macOS arm64 e Windows x64. Builds para outras arquiteturas não existem oficialmente. Se você precisa de suporte a ARM no Linux, compilação própria é o caminho, e o processo leva cerca de vinte minutos em uma máquina padrão. Se o seu cenário é mais complexo do que o projeto consegue lidar — como validações cross-database, integrações com ferramentas de monitoring existentes, ou volumes muito altos — considere alternar para o Great Expectations ou o dbt tests. Eles têm comunidades maiores, documentação mais completa e suporte ativo contínuo. O innocent innocent é útil para times pequenos que querem algo leve e direto, mas não espere que ele resolva problemas enterprise.

O projeto está sob licença MIT. Você pode modificar, distribuir e usar comercialmente sem pedir permissão. O que não pode fazer é reclamar quando algo quebrar durante uma migração de versão, já que o roadmap publicado indica que a versão 1.0 ainda não tem data definida e mudanças breaking entre versões 0.x são documentadas mas não sempre refletidas nos changelogs de forma clara.