Pular para o conteúdo
fernando.moretes.com
BlogEstudosCursosE-booksOpen SourcePodcasts
Loading…
Fernando Azevedo

Arquiteto de TI Especialista

Arquitetura, AWS, IA em produção, sistemas financeiros e FinOps, escritos a partir do que foi operado, com os números.

  • LinkedIn
  • GitHub
  • E-mail

Conteúdo

  • Blog
  • Estudos de arquitetura
  • Cursos
  • E-books
  • Open Source
  • Podcasts
  • Assuntos
  • Trilhas

Ferramentas

  • Moretes Architect MCP
  • Well-Architected self-check
  • Arquitetura deste site
  • Números públicos
  • Histórico de estudo

Sobre

  • Comunidade
  • Hugging Face
  • IA Builder
  • Perfil
  • Currículo (CV)
  • Trabalhe comigo
  • Media kit
  • RSS do blog
  • RSS dos estudos
  • Artigos narrados (podcast)
  • llms.txt
  • Termos, privacidade e uso de IA

(c) 2026 Fernando Francisco Azevedo

Blog/Artigo
RSSMarkdownLLMs
Dados & PlataformasRadar de Tendências

Regra de qualidade gerada por LLM custa pouco; difícil é mantê-la por anos

6 de nov. de 2026 8 minAvançado Com apoio de IA000 visualizações00 reproduções
Ouvir artigo

15:04 · voz do Fernando

Depois de 16 anos construindo plataformas financeiras sobre AWS, a pergunta que eu faço sobre qualidade de dados não é "quem escreve a regra?", é "quem responde por ela às 2h da manhã, quando ela barra uma carga legítima?". O caso da Indegene, publicado em 4 de novembro de 2026, importa por causa dessa segunda pergunta: um agente propõe regras e código, mas só o que passa por aprovação humana entra no repositório central. Combinado com o modo ADVANCED do AWS Glue Data Quality, ele indica para onde o custo está indo: sai da autoria e vai para a manutenção.

Três números para calibrar a decisão

17
Regiões com o modo ADVANCED
A lista da documentação não inclui sa-east-1
14d
Retenção padrão da amostra no S3
Regra de lifecycle sobre os resultados do Athena
267h
Revisão num cenário hipotético meu
200 tabelas × 40 colunas × 1 regra × 2 minutos

O sinal: gerar regra virou commodity

O Data Quality Agent da Indegene faz parte da NEXT Unified Data Platform. Foi construído com Strands Agents, roda no Amazon Bedrock AgentCore e atende Amazon Redshift e Snowflake atrás de AWS WAF, API Gateway e Cognito, com OAuth 2.0 e validação do JWT a cada requisição. O fluxo tem 10 etapas: fonte, schema, profiling, anomalias contra baseline histórico, gestão de regras existentes, modo de regra (coluna, tabela ou query customizada), sugestões com severidade, revisão, geração e validação de SQL e Python, e gravação no repositório central.

Duas bases de conhecimento dão o contexto. A interna reúne glossários, dicionários de dados, SOPs, orientação regulatória, regras aprovadas, scripts validados, resultados de profiling, anomalias históricas e feedback de especialistas. A externa vem de frameworks aprovados, busca na web e scraping controlado. É isso que permite ao agente sugerir o formato de 10 dígitos para uma coluna de NPI sem que alguém o ensine.

Em setembro de 2026, o Glue Data Quality ganhou o modo ADVANCED, que usa Bedrock sobre metadados e uma amostra aleatória da tabela para gerar regras em DQDL. Quando o próprio plano de dados entrega geração de fábrica, ela deixa de ser diferencial de plataforma.

Um limite do que li: a parte do post que consegui abrir termina na descrição da arquitetura, sem detalhar o mecanismo de validação e sem número de resultado. Por isso não cito ganho percentual aqui.

O que muda para quem desenha a plataforma

Regra vira artefato de design time: a documentação avisa que ADVANCED pode devolver regras diferentes para a mesma tabela, então geração não pode estar no caminho de execução.
O gargalo muda de lugar: escrever deixa de ser o limite, a capacidade de revisão humana passa a ser.
Regra técnica e regra de negócio passam a ter o mesmo ciclo de vida: a que hoje mora no código e a que mora em SOP entram no mesmo repositório versionado.
A amostra vira superfície de dados: gerar com contexto significa enviar linhas reais a um modelo, e isso exige decisão de classificação antes do primeiro run.
A base de conhecimento pode propagar erro: regra aprovada volta como contexto, então um erro aprovado hoje pode ser sugerido de novo amanhã.

Onde a regra gerada erra sem avisar

O risco não é a regra que quebra, é a regra que passa. Regra com erro de sintaxe falha no primeiro run. As abaixo rodam verdes durante meses:

  • Semântica invertida: no CustomSql com resultado por linha, registro devolvido pela query conta como aprovado e registro não devolvido como reprovado. Um modelo que escreve a query natural de auditoria, select id from primary where valor < 0, aprova exatamente os registros errados.
  • Filtro que aprova: com where, as linhas filtradas saem como Passed por padrão. Use rowLevelConfiguration.filteredRowLabel = SKIPPED, ou um filtro que não casa com nada parece conformidade.
  • Composite por coluna: por padrão, (A) or (B) avalia cada regra na tabela inteira e combina depois. O exemplo da documentação falha nesse modo e passa com compositeRuleEvaluation.method = ROW. Completeness, Uniqueness, DatasetMatch e ReferentialIntegrity nem têm suporte no modo ROW.
  • Histórico vazio: sem pontos anteriores, last(k) devolve 0.0, então RowCount > last() passa na primeira execução sem provar nada.
  • Domínio congelado: regra derivada da amostra, como ColumnValues "territorio" in [...], trata o valor novo e legítimo como defeito, e pode tratar o defeito antigo como domínio válido.

O exemplo de negócio do post, participação de mercado somando 100% por território, tem a mesma armadilha numérica de uma conciliação financeira: exige tolerância explícita. Uma forma em DQDL, com tolerância que você precisa calibrar: CustomSql "select count(*) from (select territory_id from primary group by territory_id having abs(sum(market_share) - 100) > 0.5) t" = 0.

Onde a aprovação humana separa geração de execução

O diagrama responde a uma pergunta: o que precisa acontecer para uma sugestão do modelo virar regra em produção. É uma simplificação das 10 etapas descritas no post. As setas tracejadas são o retorno assíncrono à base de conhecimento, e é por ali que um erro aprovado pode voltar como sugestão.

Generation
  • Knowledge bases · internal + external
  • Data Quality Agent · Strands + AgentCore
Governance
  • Data steward · review and edit
  • Code validation · SQL + Python
  • Rule repository · approved rules
Runtime
  • Redshift, Snowflake · rule execution
  • Monitoring and audit · results

A fronteira da amostra é decisão de arquitetura

O modo ADVANCED é prático, e a documentação de proteção de dados é clara sobre o que ele faz. O Athena amostra as linhas pelo workgroup glue-dataquality-sampling, e o Glue não exclui nenhuma coluna da amostra. Metadados e linhas seguem para o Bedrock, que não retém entrada nem saída depois do processamento e não as usa para treinar modelos. Até aqui, para muito cenário, isso basta.

Para dado de profissional de saúde, de paciente ou de cliente bancário, três detalhes mudam a conta:

  • Sem máscara na chamada: ADVANCED não aceita PreProcessingQuery, então o SELECT sem a coluna sensível, que seria a saída óbvia, não está disponível. Aponte o run para uma tabela já mascarada.
  • Inferência entre Regiões: o run usa geographic cross-Region inference, e o conteúdo amostrado pode sair da Região de origem, dentro do limite geográfico do perfil. Com sa-east-1 fora da lista, o caminho precisa entrar no seu inventário de transferência da LGPD e, se for o caso, na avaliação de BACEN 4.893.
  • IAM do Bedrock não é o controle: a role de recomendação não precisa de permissão de Bedrock, logo negar bedrock:InvokeModel nela não garante o bloqueio do envio. O controle útil é fixar aws:SourceArn na tabela, na trust policy, e não dar à role acesso à tabela sensível.

O BASIC também merece atenção. Nas Regiões suportadas, ele tenta enriquecer o ruleset com Bedrock enviando o ruleset e metadados de coluna, sem você habilitar nada. Um ruleset estatístico pode carregar valores reais numa lista ColumnValues ... in [...], então confira isso na sua classificação.

Três caminhos para gerar regras

CritérioGlue BASICGlue ADVANCEDAgente próprio (padrão Indegene)
Contexto da regraEstatísticas da tabelaMetadados e amostra de linhasGlossário, SOP, histórico e feedback de especialista
FontesTabelas do Data Catalog e jobs ETLTabelas do Data Catalog, em 17 RegiõesAs que você conectar; no caso, Redshift e Snowflake
Dado enviado ao modeloRuleset e metadados de coluna, quando há enriquecimentoMetadados e linhas, sem exclusão de colunaO que seu design permitir, e o controle é seu
Custo que ficaRevisar regra estatísticaRevisar cada run e pagar AthenaManter agente, bases, avaliação e tudo acima
Use quandoA base é nova e o objetivo é cobrir o estruturalO dado pode ser amostrado e o catálogo já é o GlueA regra depende de conhecimento que não está na tabela, em várias plataformas

Aprovação humana é capacidade, não caixa de seleção

Human-in-the-loop costuma aparecer em diagrama como um ícone de pessoa. Na operação, ele é uma fila. Faça a conta do seu ambiente. No meu cenário hipotético, 200 tabelas com 40 colunas e uma única regra por coluna dão 8.000 regras. A 2 minutos por regra, são 267 horas de revisão antes da primeira execução. Ninguém revisa isso com atenção: em algum ponto da fila, aprovar vira clicar, e o controle continua no papel enquanto deixa de existir na prática.

A severidade por regra, que o agente da Indegene já sugere, é o que torna essa fila administrável. Revise uma a uma o que é crítico, aprove em lote o estrutural de baixo risco com amostragem de auditoria, e descarte sem culpa a regra que ninguém assumiria como dono. Regra sem dono nomeado não deveria entrar no repositório.

Depois vem o custo recorrente. Pelos exemplos da página de preços do Glue, uma avaliação de 5 DPUs por 20 minutos custa cerca de US$ 0,73, a US$ 0,44 por DPU-hora. Em 200 tabelas, diariamente, são cerca de US$ 4.380 por mês, e esse é o menor dos custos. O maior é o alerta falso: cada regra ruim gera investigação, e equipe que investiga alarme falso três vezes para de olhar o quarto. Meça por regra quantas falhas viraram correção real, e aposente a que nunca virou.

Como eu me posicionaria

Trate regra como código: o ruleset aprovado vai para repositório versionado, com hash, dono, severidade e motivo. A execução só lê essa versão, nunca chama o modelo. Isso também resolve o não determinismo: rodar a geração duas vezes não muda o que está em produção.

Teste a regra contra dado com defeito plantado: para cada regra, uma fixture com registros bons e outra com o defeito que ela promete pegar. A regra precisa passar na primeira e falhar na segunda. É o teste que pega o CustomSql invertido, e nenhuma revisão de texto pega com a mesma confiabilidade. As ferramentas de avaliação do Strands ajudam a medir o agente, mas juiz LLM avaliando saída de LLM não substitui executar a regra.

Não confunda plano válido com query segura: o EXPLAIN do Redshift mostra o plano sem executar, e também aceita UPDATE e DELETE. Passar nele prova que a query compila, não que ela só lê. Combine com allowlist de SELECT no parser e role somente leitura.

Separe a identidade de geração da de execução: o post de 5 de novembro sobre AgentCore e Lake Formation mostra o caminho certo para exploração: a query roda sob a role mapeada do usuário, com LF-Tags e data cell filters, e o controle não depende do SQL que o agente escreveu. A execução em produção é outra história. A matriz do Glue marca tabelas com filtro de coluna ou de dados do Lake Formation como não suportadas em vários formatos, então a role de qualidade tende a ter acesso amplo. Trate essa role como principal privilegiado e audite-a como tal.

O que eu não faria

  • Gerar regra em tempo de execução: o mesmo dado pode receber regras diferentes entre runs, e a auditoria perde a resposta para "qual regra valia naquele dia?".
  • Medir sucesso por número de regras: cobertura por coluna é fácil de inflar, e cada regra a mais é mais uma fonte de alerta para alguém manter.
  • Colocar conteúdo da web direto no RAG de regras: página raspada é entrada não confiável. Exija a mesma curadoria da base interna, ou uma regra sugerida pode nascer de um texto que ninguém aprovou.
  • Depender de labels para severidade em todo lugar: labels de DQDL só existem no Glue ETL, não no Data Quality baseado no Data Catalog. Quem padroniza nisso descobre o buraco no relatório.

A lição do ciclo de retorno

Regras aprovadas e scripts validados entram na base interna. Isso melhora a sugestão seguinte e também dá a uma aprovação ruim um alcance que ela não tinha: o erro deixa de afetar uma tabela e passa a orientar as próximas. Ao revogar uma regra, remova também o vetor dela da base. Quem só apaga do repositório deixa o erro vivo no contexto.

FA
Nota do curador
Arquiteto de TI Especialista

Eu começaria pelo Glue BASIC numa base não sensível e usaria ADVANCED só sobre tabela mascarada, antes de escrever uma linha de agente. Escreveria as fixtures com defeito plantado na primeira semana, porque é o único item desta lista que fica mais caro a cada regra aprovada sem ele. Só partiria para agente próprio quando a regra que importa dependesse de SOP e glossário, em mais de uma plataforma, que é a condição real do caso Indegene. A lição que levo de sistemas financeiros: o custo de um controle automatizado não é o custo de criá-lo, é o de provar anos depois por que ele existe e se ainda funciona.

Minha recomendação

Adote com governança / Adopt with govern

Use o recurso nativo do Glue quando seu catálogo já está nele, a regra se explica pelos dados e a amostra pode ir ao modelo. Construa um agente quando a regra depende de conhecimento fora da tabela, em várias plataformas, e você tem como pagar a manutenção dele. Nos dois casos, não aprove em escala antes de ter dono por regra, teste com defeito plantado e critério de aposentadoria: sem isso, gerar mais rápido só antecipa a dívida.

Referências

How Indegene is modernizing and scaling enterprise data quality in life sciencesGetting started with AWS Glue Data Quality: recommendation modesData protection for advanced data quality rule recommendationsConfigure IAM permissions for AWS Glue Data QualityData Quality Definition Language (DQDL) referenceDQDL rule type: CustomSQLAmazon Redshift: EXPLAINDeliver multi-tenant AI analytics at scale with AgentCore and Lake Formation
#data quality#agentes de IA#AWS Glue#Amazon Bedrock#AgentCore#governança de dados#human-in-the-loop
Compartilhar:LinkedInWhatsAppXBaixar em Markdown
Fonte analisada: How Indegene is modernizing and scaling enterprise data quality in life sciences
Próximo passo
Trilha Arquiteto de IA, gratuitaFundamentos, LLMs, RAG, tools, MCP e arquitetura na AWS, em aulas curtas e interativas.Começar a trilhaAgentes de IA em produção na AWSComo eu desenho, oriento e audito agentes que vão ao ar, com os números e as fontes.Ver o IA Builder

Continue lendo

Dados & PlataformasMediaLive sem timecode: o que o Video Aligned Locking muda na redundânciaO MediaLive passou a sincronizar pipelines por assinatura visual dos frames, sem depender de timecode embutido, exatamente a peça que faltava para fontes SRT/RTMP de campo e para canais single-pipeline ligados entre regiões. Disseco o padrão: o problema que ele resolve, a anatomia dos modos e métodos de locking, as regras de frame rate e de input que derrubam a sincronização em silêncio, e as três métricas que precisam de alarme antes de ir para produção.Ler Dados & PlataformasCapacidade por tipo de trabalho no Amazon Connect: o que muda de fatoO Amazon Connect passou a permitir concorrência por tipo de trabalho dentro dos canais Task e Email, e não mais só por canal. O ganho operacional é concreto em filas de alta variância, disputa, KYC, backoffice regulatório. O preço é uma taxonomia nova para governar e um modo de falha que não grita: contato com workload type sem linha correspondente no routing profile fica na fila para sempre.Ler Dados & PlataformasRedshift e Iceberg v3: notas de campo para lakes mutáveisO suporte do Amazon Redshift a Apache Iceberg v3, anunciado em 31 de agosto de 2026, muda a conversa sobre data lakes mutáveis. Eu trataria default values, row lineage e deletion vectors como primitivas operacionais, não apenas como recursos de formato.Ler
AnteriorLambda com filas do Kafka: paralelismo acima das partições, e o que ele custa
Gostou desta análise? Receba a próxima.

Deep dives de arquitetura, AWS, IA e mercado: direto no seu email. Grátis.

Sem spam · cancele quando quiser

Pergunte ao Fernando sobre isto

Uma resposta focada sobre este artigo, do meu assistente de IA, baseada no meu trabalho.

Participe da conversa

Entre para comentar

Confirme seu e-mail para participar, você também recebe a newsletter. Sem senha.

Neste artigo
O sinal: gerar regra virou commodityOnde a regra gerada erra sem avisarArquiteturaA fronteira da amostra é decisão de arquiteturaTrês caminhos para gerar regrasAprovação humana é capacidade, não caixa de seleçãoComo eu me posicionariaAntipadrõesMinha recomendaçãoReferências