☕ Um Café no Bellacosa Mainframe
Gostou do conteúdo? Ajude a manter o café quente, o COBOL compilando e o mainframe acordado. 😄
☕ Pague um café ao Bellacosa

Translate

Mostrar mensagens com a etiqueta Analytics. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Analytics. Mostrar todas as mensagens

quarta-feira, 18 de fevereiro de 2026

🔥 NumPy: O “PACKED DECIMAL” do Python que Vai Explodir sua Cabeça COBOL

 

Bellacosa Mainframe apresenta a biblioteca matematica do Python

🔥 NumPy: O “PACKED DECIMAL” do Python que Vai Explodir sua Cabeça COBOL

Se você veio do mundo COBOL, onde cada byte importa, cada campo tem propósito e cada processamento precisa ser eficiente… então prepare-se: você está prestes a conhecer o coração matemático do Python — a biblioteca NumPy.

E sim… ela é MUITO mais próxima do seu mundo do que você imagina.


☕ O choque de realidade: Python puro vs processamento “mainframe-like”

No COBOL, você já sabe:

  • COMPUTE é rápido
  • PERFORM VARYING é controlado
  • Estruturas são previsíveis

Agora veja isso no Python “cru”:

lista = [1, 2, 3, 4]
resultado = [x * 2 for x in lista]

Funciona… mas não é exatamente eficiente nível mainframe, certo?

Agora entra o NumPy:

import numpy as np

array = np.array([1, 2, 3, 4])
resultado = array * 2

💥 BOOM.

Você acabou de fazer processamento vetorial, algo muito mais próximo de um:

“loop implícito otimizado em assembler por baixo dos panos”

Sim… isso cheira a z/Architecture.


🧠 Origem: quando cientistas reinventaram o “processamento batch”

O NumPy nasceu oficialmente em 2006, mas sua raiz vem de duas bibliotecas:

  • Numeric
  • Numarray

Ambas criadas para resolver um problema clássico:

“Python era bom… mas lento para matemática pesada”

A fusão virou NumPy — e trouxe um conceito poderoso:

👉 Arrays homogêneos de alta performance

Se você pensa em:

  • tabelas VSAM
  • buffers de memória
  • áreas de trabalho

Você já entendeu metade do NumPy.


⚙️ O conceito que muda tudo: ndarray

O coração do NumPy é o ndarray (N-dimensional array).

Pense nisso como:

COBOLNumPy
OCCURSarray
PIC 9(5)V99dtype=float64
Tabela indexadandarray
Área contígua memóriabuffer otimizado

Exemplo:

import numpy as np

dados = np.array([10, 20, 30])
print(dados * 2)

Saída:

[20 40 60]

Sem loop explícito. Sem PERFORM.

👉 Isso é chamado de vectorization.


🚀 Performance: aqui mora o espírito do mainframe

NumPy é rápido porque:

  • Escrito em C (baixo nível)
  • Usa operações vetorizadas
  • Evita overhead de loops Python

📌 Tradução para o mundo COBOL:

“Você está rodando um SORT interno com exit em assembler… sem escrever assembler.”


🔍 Curiosidades que todo coboleiro vai amar

🧩 1. NumPy evita loops como você evita GO TO

Loops em Python são lentos.

NumPy resolve isso com operações vetoriais:

a = np.array([1,2,3])
b = np.array([4,5,6])

print(a + b)

Resultado:

[5 7 9]

👉 Isso é equivalente a um loop automático altamente otimizado.


🧠 2. Broadcasting: o PERFORM invisível

a = np.array([1,2,3])
print(a + 10)

Resultado:

[11 12 13]

Sem loop. Sem stress.

👉 O NumPy “espalha” o valor automaticamente.


🏎️ 3. Memória contígua = performance absurda

Diferente de listas Python, NumPy usa:

  • memória contínua
  • tipos fixos

👉 Isso lembra:

  • buffers de I/O
  • áreas de WORKING-STORAGE bem definidas

🧪 Exemplos práticos (modo COBOL mindset ON)

📊 Soma de um dataset

COBOL:

PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100
ADD VALOR(I) TO TOTAL
END-PERFORM

NumPy:

np.sum(array)

💥 1 linha. Otimizado. Vetorizado.


📈 Média (sem reinventar roda)

np.mean(array)

👉 Nada de controle manual. Nada de variáveis acumuladoras.


🔄 Transformação em massa

array * 1.15

👉 Isso é literalmente um:

“REDEFINES aplicado em lote com COMPUTE automático”


🧠 Easter Eggs e detalhes escondidos

🥚 1. O tipo float64 é padrão

👉 Isso significa precisão alta — quase como trabalhar com campos bem definidos no COBOL financeiro.


🥚 2. Você pode acessar o “layout de memória”

array.strides

👉 Sim… você pode ver como os dados estão distribuídos na memória.

Isso é nível:

“debug de storage layout no mainframe”


🥚 3. NumPy conversa com C diretamente

👉 Isso permite integrar com código de baixo nível.

Ou seja:

Python vira quase um “COBOL com superpoderes científicos”


⚔️ NumPy vs Python puro (visão mainframe)

AspectoPython puroNumPy
PerformanceBaixaAltíssima
TipagemDinâmicaEstática (dtype)
MemóriaFragmentadaContígua
LoopManualVetorizado
EstiloScriptCientífico / batch-like

🌍 Onde isso entra na sua evolução?

Se você domina COBOL, NumPy é uma ponte natural para:

  • 📊 Data Science
  • 🤖 Machine Learning
  • 📈 Analytics de alto volume
  • 🧮 Simulações financeiras

E mais importante:

👉 Você não começa do zero
👉 Você reaproveita seu mindset de performance


🎯 Conclusão: o despertar do coboleiro moderno

NumPy não é só uma biblioteca.

É uma mudança de paradigma.

É quando você percebe que:

“O Python pode ser tão performático quanto um batch bem escrito — se você usar as ferramentas certas.”

E aqui vai a provocação final:

🔥 Se COBOL é o rei do processamento estruturado…
🔥 NumPy é o motor matemático que pode levar você além do mainframe.


domingo, 29 de setembro de 2024

Data Mining vs Data Analytics: Como um Programador Júnior Pode Transformar Dados em Inteligência de Negócios (e por que isso também importa no IBM Z)

 

Bellacosa Mainframe data mining versus data analytucs

☕ Um Café no Bellacosa Mainframe

Data Mining vs Data Analytics: Como um Programador Júnior Pode Transformar Dados em Inteligência de Negócios (e por que isso também importa no IBM Z)

"No mundo da tecnologia, dados são o novo petróleo. Mas petróleo bruto não move um carro. Primeiro ele precisa ser refinado. Com dados acontece exatamente a mesma coisa."

Quando alguém começa sua carreira em desenvolvimento de software, principalmente no universo do IBM Mainframe, costuma imaginar que seu trabalho será apenas escrever programas COBOL, criar JCLs, consultar DB2 ou desenvolver transações CICS.

E durante algum tempo isso realmente acontece.

Mas, conforme você evolui, percebe uma verdade importante:

Programadores não desenvolvem apenas software. Desenvolvem conhecimento.

Toda aplicação corporativa existe por um motivo: gerar, armazenar ou consumir dados.

E é justamente aí que entram dois conceitos que aparecem cada vez mais em entrevistas, projetos modernos e iniciativas de Inteligência Artificial:

  • Data Mining

  • Data Analytics

Muita gente acredita que são sinônimos.

Não são.

Na verdade, um complementa o outro.

Hoje vamos tomar mais um café e entender essa diferença de uma maneira que faça sentido para um desenvolvedor iniciante, principalmente para quem pretende trabalhar com sistemas corporativos de grande porte.


O tesouro escondido dentro do banco de dados

Imagine que você trabalha em um grande banco.

Todos os dias são registrados:

  • 25 milhões de transações

  • 8 milhões de PIX

  • 4 milhões de compras no cartão

  • 900 mil empréstimos simulados

  • milhares de acessos ao Internet Banking

Agora imagine isso acontecendo durante vinte anos.

Estamos falando de bilhões de registros.

Você conseguiria abrir uma planilha com tudo isso?

Nem o Excel teria coragem.

Então surge uma pergunta.

Como descobrir informações úteis dentro dessa montanha de dados?

É exatamente essa pergunta que deu origem ao Data Mining.


O que é Data Mining?

A tradução literal seria algo como:

Mineração de Dados.

O nome não foi escolhido por acaso.

Imagine um garimpeiro.

Ele não está interessado em toda a terra da mina.

Ele quer encontrar ouro.

Para isso precisa cavar toneladas de pedras.

O Data Mining faz exatamente isso.

Ele "escava" enormes bases de dados procurando algo valioso.

Pode ser:

  • padrões

  • tendências

  • correlações

  • comportamentos

  • anomalias

  • oportunidades

  • riscos

O objetivo não é produzir relatórios bonitos.

O objetivo é descobrir conhecimento escondido.


Data não é informação

Essa é uma das primeiras lições da Ciência de Dados.

Imagine esta sequência.

235
842
129
842
235
991

São apenas números.

Agora imagine que você descubra que representam códigos de produtos vendidos.

Ainda assim são apenas dados.

Agora descubra que:

  • 842 vende três vezes mais nas sextas-feiras;

  • 235 sempre é comprado junto com 991;

  • clientes que compram 129 têm alta chance de cancelar o serviço em até 90 dias.

Agora sim existe informação.

E foi o Data Mining que encontrou isso.


Data Analytics entra em cena

Suponha que o Data Mining encontrou o seguinte padrão:

Clientes entre 20 e 30 anos cancelam o serviço três vezes mais que os demais.

Excelente descoberta.

Mas...

E agora?

O que fazer com essa informação?

É aqui que entra o Data Analytics.

Analytics responde perguntas como:

  • Isso representa quanto de prejuízo?

  • Qual campanha devemos lançar?

  • Vale a pena oferecer desconto?

  • Quanto vamos economizar?

  • Qual decisão deve ser tomada?

Perceba a diferença.

Data Mining encontra.

Data Analytics interpreta.


Uma analogia simples

Imagine um arqueólogo.

Ele encontra uma antiga espada enterrada.

Esse trabalho é o Data Mining.

Agora entra um historiador.

Ele analisa a espada.

Descobre:

  • de qual época veio;

  • quem provavelmente a utilizava;

  • sua importância histórica;

  • seu valor.

Esse é o Data Analytics.


A grande confusão

Uma das frases da imagem diz que:

Data Mining é apenas parte do Data Analytics.

Na prática, isso está correto.

Analytics é muito mais amplo.

Ele envolve:

  • Estatística

  • Business Intelligence

  • Dashboards

  • KPIs

  • Visualização

  • Inteligência Artificial

  • Machine Learning

  • Forecast

  • Otimização

  • Data Mining

Ou seja:

Data Analytics

│

├── Estatística

├── BI

├── Dashboards

├── Visualização

├── IA

├── Machine Learning

└── Data Mining

Mining é uma ferramenta.

Analytics é a estratégia.


Onde entra o Machine Learning?

Outra dúvida bastante comum.

Machine Learning não substitui Data Mining.

Na verdade, ele fornece muitos dos algoritmos utilizados durante a mineração.

Por exemplo:

  • Árvores de decisão

  • Redes neurais

  • Random Forest

  • K-Means

  • Regressão

  • SVM

Todos podem ser utilizados para descobrir padrões.


As quatro grandes perguntas da análise de dados

Existe um modelo bastante conhecido.

1. O que aconteceu?

Análise Descritiva.

Exemplo.

"As vendas caíram 15%."


2. Por que aconteceu?

Análise Diagnóstica.

"O concorrente lançou uma promoção."


3. O que vai acontecer?

Análise Preditiva.

"Existe 82% de chance de queda nas vendas no próximo trimestre."


4. O que devemos fazer?

Análise Prescritiva.

"Aumentar o investimento em marketing digital na região Sudeste."

Perceba como o Analytics evolui da observação para a ação.


Um exemplo usando COBOL

Imagine um programa COBOL responsável por registrar pagamentos.

Todos os dias ele grava milhões de registros.

Durante cinco anos ele acumulou:

CLIENTE

VALOR

DATA

HORA

AGÊNCIA

CANAL

TIPO DE PAGAMENTO

Agora imagine um cientista de dados analisando tudo isso.

O Data Mining descobre que:

  • clientes acima de 65 anos utilizam mais caixas eletrônicos;

  • pagamentos acima de determinado valor aumentam nas sextas-feiras;

  • determinadas agências apresentam comportamento incomum.

Nenhum programador escreveu essas regras.

Os algoritmos descobriram.


Agora entra o Analytics

O Analytics recebe essas descobertas.

Calcula:

  • impacto financeiro;

  • risco;

  • ROI;

  • custo operacional.

Depois responde:

Vale abrir mais caixas eletrônicos?

Vale reforçar a equipe?

Vale oferecer novos produtos?

É por isso que Analytics está diretamente ligado ao negócio.


E no IBM Mainframe?

Muitos iniciantes imaginam que Mainframe apenas executa programas COBOL.

Nada poderia estar mais distante da realidade.

Todos os dias um IBM Z produz uma quantidade gigantesca de informações.

Exemplos.

SMF Records.

RMF.

JES2.

JES3.

SDSF.

RACF.

DB2.

IMS.

MQ.

OMEGAMON.

CICS.

z/OSMF.

Cada componente registra milhares de eventos.

Isso significa milhões de linhas diariamente.


Um Sysprog também faz Analytics

Imagine analisar os registros SMF.

O Data Mining pode descobrir:

  • Jobs que sempre falham juntos.

  • Crescimento gradual do consumo de CPU.

  • Programas responsáveis por gargalos.

  • Horários de pico.

  • Tendências de utilização do DASD.

  • Perfis suspeitos de acesso RACF.

Depois entra o Analytics.

Ele responde.

Devemos comprar mais processadores?

Precisamos aumentar memória?

Vale reorganizar o DB2?

Precisamos alterar políticas do WLM?

Ou seja.

Até mesmo um Administrador Mainframe trabalha com Analytics sem perceber.


Curiosidade

Você sabia que grandes bancos analisam bilhões de registros diariamente usando dados originados no próprio Mainframe?

Isso acontece porque o IBM Z continua sendo responsável por boa parte das transações financeiras do planeta.

Não é exagero dizer que boa parte do dinheiro movimentado diariamente passa por algum sistema que gera dados para análises.


O ciclo completo

Visualmente seria algo assim.

Aplicações

↓

COBOL

↓

CICS

↓

DB2

↓

Dados

↓

ETL

↓

Data Warehouse

↓

Data Mining

↓

Machine Learning

↓

Data Analytics

↓

Dashboards

↓

Decisões

↓

Novas Estratégias

Perceba.

Tudo começa com um bom software.


O futuro: IA + Analytics

Nos últimos anos surgiu um novo personagem.

A Inteligência Artificial Generativa.

Agora imagine o seguinte diálogo.

"ChatGPT, quais foram os cinco produtos com maior crescimento no último trimestre?"

A IA consulta o banco de dados.

Executa SQL.

Analisa gráficos.

Cruza informações.

Explica os resultados.

Sugere decisões.

Esse é o conceito de Augmented Analytics, em que a IA acelera a interpretação dos dados, permitindo que analistas e gestores se concentrem nas decisões de maior impacto.


Dicas para um Programador Júnior

Se você está começando, não tente aprender tudo ao mesmo tempo. Construa uma base sólida.

1. Aprenda SQL profundamente
Quase todo projeto de dados começa com consultas bem escritas. Saber fazer JOIN, GROUP BY, funções analíticas e otimizar consultas é uma habilidade valiosa.

2. Entenda modelagem de dados
Conheça tabelas normalizadas, chaves primárias, chaves estrangeiras e relacionamentos. Um bom modelo facilita qualquer análise.

3. Domine Excel e Power BI
Mesmo em grandes empresas, essas ferramentas são amplamente utilizadas para explorar dados e criar dashboards.

4. Aprenda Python
Bibliotecas como Pandas, NumPy, Matplotlib e Scikit-learn permitem manipular dados e criar modelos de forma eficiente.

5. Conheça estatística básica
Média, mediana, desvio padrão, correlação e distribuição são conceitos essenciais para interpretar resultados corretamente.

6. Desenvolva visão de negócio
Pergunte sempre: "Como essa análise ajuda a empresa?" A tecnologia existe para resolver problemas reais.

7. Se você é do Mainframe, explore os dados da plataforma
SMF, RMF, Db2, CICS e RACF são verdadeiras minas de informação. Aprender a interpretá-los pode diferenciá-lo no mercado.


Erros comuns dos iniciantes

❌ Acreditar que gráficos são Analytics. Um gráfico sem contexto não responde perguntas de negócio.

❌ Pensar que Machine Learning resolve qualquer problema. Um modelo treinado com dados ruins produzirá resultados ruins.

❌ Ignorar a qualidade dos dados. Dados duplicados, incompletos ou inconsistentes comprometem qualquer análise.

❌ Focar apenas na ferramenta. O mais importante é entender o problema, não apenas dominar uma linguagem ou software.


Easter Eggs Bellacosa Mainframe ☕

🥚 Easter Egg #1 – O Data Miner do século XXI
Se um garimpeiro usa uma peneira para separar ouro da areia, o cientista de dados usa algoritmos para separar conhecimento do ruído. Em ambos os casos, a matéria-prima é abundante, mas o valor está escondido.

🥚 Easter Egg #2 – O COBOL já fazia Analytics sem esse nome
Muitos sistemas COBOL geravam relatórios gerenciais, balanços e estatísticas décadas antes de "Data Analytics" virar um termo popular. A diferença é que hoje utilizamos ferramentas muito mais sofisticadas para explorar esses mesmos dados.

🥚 Easter Egg #3 – O Mainframe é uma fábrica de dados
Cada transação CICS, cada acesso ao Db2, cada Job JES2 e cada registro SMF conta uma parte da história da empresa. Quando unidos, esses eventos formam um dos ativos mais valiosos de qualquer organização.

🥚 Easter Egg #4 – O verdadeiro ouro não está no algoritmo
O algoritmo encontra padrões, mas quem transforma esses padrões em inovação é o ser humano. Conhecimento técnico e entendimento do negócio continuam sendo diferenciais insubstituíveis.

🥚 Easter Egg #5 – O café do Bellacosa
Se você chegou até aqui, já percebeu que programar vai muito além de escrever código. Todo sistema existe para apoiar decisões, e toda decisão de qualidade nasce de dados bem compreendidos. O café é apenas a desculpa para conversarmos sobre isso.


Conclusão

A principal lição deste café é simples: Data Mining e Data Analytics não disputam espaço; eles trabalham em conjunto. O primeiro explora grandes volumes de dados para revelar padrões, tendências e anomalias. O segundo interpreta essas descobertas, contextualiza os resultados e transforma conhecimento em ações estratégicas.

Para um programador júnior — seja em desenvolvimento web, ciência de dados ou IBM Mainframe — compreender essa diferença é um passo importante na evolução profissional. Afinal, cada programa COBOL, cada tabela Db2, cada API ou cada transação CICS produz dados que podem orientar decisões de negócio.

No fim das contas, o código é apenas o começo da jornada. O verdadeiro valor aparece quando esses dados são transformados em conhecimento, e esse conhecimento se converte em melhores produtos, processos mais eficientes e decisões mais inteligentes.

"Quem aprende apenas a programar constrói sistemas. Quem aprende a entender os dados constrói o futuro. No universo IBM Z, onde bilhões de transações acontecem silenciosamente todos os dias, cada registro pode esconder uma oportunidade esperando para ser descoberta."

quarta-feira, 29 de julho de 2020

ETL Clássico vs. ELT Moderno sem Mistérios

 

Bellacosa Mainframe e o ETL Sem misterios conheca o classico versus o moderno


☕ Um Café no Bellacosa Mainframe

ETL Clássico vs. ELT Moderno sem Mistérios

Da fita magnética ao Data Lakehouse: o guia definitivo do programador COBOL Padawan para entender como os dados aprenderam a viajar no tempo

Imagine a seguinte cena.

São duas horas da manhã em um grande centro de processamento de dados. As luzes da sala estão apagadas, mas centenas de pequenos indicadores piscam silenciosamente. No console do operador, uma fila de jobs atravessa o JES2. Um programa COBOL lê milhões de registros de um arquivo VSAM, consulta tabelas no Db2, gera um arquivo sequencial e o entrega para outro processo.

Depois, um job de transformação organiza os dados.

Outro job elimina duplicidades.

Outro converte datas.

Outro calcula totais.

Finalmente, já perto do amanhecer, as informações chegam ao Data Warehouse, prontas para alimentar os relatórios que os gestores abrirão durante o café da manhã.

Essa cena resume muito bem a era do ETL clássico.

Agora avance algumas décadas.

Os dados continuam vindo do mainframe, do ERP, do CRM, das APIs, das planilhas e de dezenas de sistemas. Porém, em vez de esperar uma longa janela batch noturna, as alterações podem ser capturadas quase em tempo real. Os dados brutos são carregados em uma plataforma de nuvem ou em um Lakehouse e somente depois são organizados, testados e modelados.

Essa segunda cena representa o ELT moderno.

À primeira vista, a diferença parece pequena. Afinal, ETL e ELT possuem as mesmas três letras:

  • E de Extract, extração;

  • T de Transform, transformação;

  • L de Load, carga.

O que muda é a ordem.

Mas, como diria o Sr. Spock ao examinar um fluxo de dados corporativo:

“Uma pequena alteração na sequência pode produzir consequências altamente ilógicas em todo o sistema.”

Trocar a posição do T e do L não é apenas reorganizar três letras. É alterar toda a filosofia da arquitetura de dados.

Prepare o café, ajuste o terminal 3270 e embarque conosco. Nesta missão, o programador COBOL Padawan descobrirá como os dados saíram dos arquivos sequenciais, atravessaram Data Warehouses gigantescos e chegaram aos modernos Data Lakes, Lakehouses, pipelines de CDC, dbt, dashboards e modelos de inteligência artificial.


1. Antes de tudo: o que é um pipeline de dados?

Um pipeline de dados é uma sequência organizada de etapas responsável por transportar informações de um lugar para outro.

Podemos compará-lo a uma linha de produção.

A matéria-prima chega, passa por máquinas, é inspecionada, transformada, embalada e enviada ao destino final.

No mundo dos dados, a matéria-prima pode ser:

  • uma tabela Db2;

  • um arquivo VSAM;

  • um banco Oracle;

  • uma aplicação SAP;

  • um arquivo CSV;

  • uma planilha;

  • uma mensagem MQ;

  • uma API;

  • um tópico Kafka;

  • um log de servidor;

  • uma transação CICS;

  • um registro IMS;

  • um arquivo gerado por um programa COBOL.

O pipeline captura essas informações, movimenta os registros, corrige formatos, aplica regras de negócio e entrega os dados para relatórios, análises, auditorias ou inteligência artificial.

Um pipeline simplificado pode ser representado assim:

Sistema de origem
       ↓
Extração
       ↓
Transformação
       ↓
Carga
       ↓
Banco analítico
       ↓
Relatórios e dashboards

No modelo moderno, a ordem normalmente muda:

Sistema de origem
       ↓
Extração
       ↓
Carga dos dados brutos
       ↓
Transformação dentro da plataforma
       ↓
Modelos analíticos
       ↓
Relatórios, ciência de dados e IA

É exatamente aí que começa a diferença entre ETL e ELT.


2. O nascimento do ETL clássico

O ETL tornou-se extremamente popular durante os anos 1990 e 2000.

Naquela época, os recursos computacionais eram muito mais caros e limitados.

Armazenamento custava caro.

Memória custava caro.

Processamento custava caro.

Licenças de bancos de dados custavam caro.

Manter grandes volumes de dados sem uso aparente era visto como desperdício.

A filosofia dominante era:

“Não carregue tudo. Carregue somente o que estiver limpo, organizado e pronto para ser usado.”

Assim surgiu o processo clássico:

Extract → Transform → Load

Ou seja:

  1. extrair os dados da origem;

  2. transformar os dados fora do Data Warehouse;

  3. carregar apenas os dados prontos.

Essa abordagem combinava muito bem com a cultura dos grandes ambientes corporativos, especialmente aqueles baseados em processamento batch.


3. ETL explicado para um programador COBOL iniciante

Vamos imaginar um cenário bancário.

Um programa COBOL processa diariamente um arquivo de movimentos financeiros.

O arquivo contém informações como:

NUMERO-CONTA
DATA-MOVIMENTO
TIPO-MOVIMENTO
VALOR-MOVIMENTO
CODIGO-AGENCIA

Esses dados precisam alimentar um Data Warehouse para que a área de negócios analise o total de depósitos, saques e transferências.

No ETL clássico, o fluxo seria parecido com este:

Db2 / VSAM / Arquivo
        ↓
Extração
        ↓
Área de staging
        ↓
Transformação
        ↓
Carga no Data Warehouse

Vamos analisar cada etapa.


4. Etapa 1 — Extract: extraindo os dados

A extração é o momento em que os dados são retirados do sistema de origem.

No mainframe, isso pode acontecer por meio de:

  • programas COBOL batch;

  • unload do Db2;

  • IDCAMS REPRO;

  • DFSORT;

  • utilitários de IMS;

  • arquivos sequenciais;

  • mensagens MQ;

  • APIs do z/OS Connect;

  • ferramentas de replicação;

  • soluções de Change Data Capture.

Um programa COBOL poderia, por exemplo, ler uma tabela Db2 e gravar um arquivo sequencial:

SELECT
    ACCOUNT_ID,
    CUSTOMER_ID,
    BALANCE,
    LAST_UPDATE
FROM ACCOUNT
WHERE LAST_UPDATE >= :DATA-ANTERIOR

O resultado seria gravado em um arquivo como:

HLQ.EXTRACAO.CONTAS.D20260716

Esse arquivo seria então enviado para a plataforma de ETL.

O ponto importante é que a extração não deveria aplicar regras complexas. Sua principal função seria capturar os dados da origem.

Contudo, na prática, muitos ambientes antigos misturavam extração e transformação no mesmo programa.

O COBOL lia a tabela, validava registros, convertia datas, alterava códigos e gravava o resultado final.

Funcionava, mas criava forte acoplamento.


5. Etapa 2 — Staging: a sala de espera dos dados

Depois da extração, os dados costumavam ser enviados para uma área temporária chamada staging.

Staging significa algo como área de preparação.

Pense nela como a doca de carga da USS Enterprise.

As caixas chegam de diferentes planetas, mas ainda não foram inspecionadas, classificadas ou distribuídas pelos compartimentos da nave.

A staging poderia conter tabelas como:

STG_CLIENTE
STG_CONTA
STG_MOVIMENTO
STG_AGENCIA
STG_PRODUTO

Os dados nessa área ainda poderiam apresentar:

  • duplicidades;

  • campos vazios;

  • datas inválidas;

  • caracteres inesperados;

  • moedas diferentes;

  • códigos de sistemas antigos;

  • informações inconsistentes.

A staging oferecia um espaço seguro para trabalhar antes de carregar o Data Warehouse oficial.

Em ambientes mainframe, o conceito de staging também podia aparecer na forma de datasets temporários:

//STAGE01 DD DSN=&&STAGING,
//            DISP=(NEW,PASS),
//            SPACE=(CYL,(100,50)),
//            DCB=(RECFM=FB,LRECL=300)

O dataset temporário era criado, utilizado por outros steps e eliminado ao final do job.

Nada muito diferente de uma tabela temporária em um pipeline moderno.

A tecnologia muda. O princípio permanece.


6. Etapa 3 — Transform: onde as regras de negócio vivem

A transformação é o coração do ETL.

É nessa etapa que os dados brutos são convertidos em informações confiáveis.

Algumas transformações comuns incluem:

Padronização de datas

A origem pode trazer:

16/07/2026

O Data Warehouse pode exigir:

2026-07-16

Padronização de valores

Uma origem pode usar vírgula decimal:

1234,56

Outra pode usar ponto:

1234.56

O pipeline precisa escolher um padrão.

Tratamento de códigos

O sistema antigo pode armazenar:

A = Ativo
I = Inativo
B = Bloqueado

O modelo analítico pode exigir:

ATIVO
INATIVO
BLOQUEADO

Eliminação de duplicidades

Dois sistemas podem possuir registros do mesmo cliente.

O processo precisa decidir:

  • qual registro é o principal;

  • qual endereço é o mais recente;

  • qual telefone deve ser preservado;

  • como consolidar os dados.

Criação de métricas

O pipeline pode calcular:

  • saldo médio;

  • faturamento mensal;

  • tempo de relacionamento;

  • quantidade de transações;

  • valor acumulado;

  • risco de crédito;

  • indicador de inadimplência.

Em um programa COBOL, uma transformação poderia parecer assim:

IF WS-TIPO-MOVIMENTO = 'C'
    ADD WS-VALOR TO WS-TOTAL-CREDITOS
ELSE
    IF WS-TIPO-MOVIMENTO = 'D'
        ADD WS-VALOR TO WS-TOTAL-DEBITOS
    END-IF
END-IF

Em uma ferramenta de ETL, a mesma lógica poderia ser implementada visualmente.

Em SQL:

CASE
    WHEN TIPO_MOVIMENTO = 'C' THEN VALOR_MOVIMENTO
    ELSE 0
END AS VALOR_CREDITO

A regra é a mesma.

O que muda é a linguagem e o lugar onde ela é executada.


7. Etapa 4 — Load: carregando o Data Warehouse

Depois que os dados fossem transformados, finalmente seriam carregados no Data Warehouse.

O Data Warehouse era cuidadosamente modelado antes da carga.

Frequentemente utilizava modelos dimensionais compostos por:

  • tabelas fato;

  • tabelas dimensão;

  • chaves substitutas;

  • históricos;

  • agregações;

  • hierarquias.

Uma tabela fato poderia conter:

FATO_VENDAS

Enquanto as dimensões poderiam ser:

DIM_CLIENTE
DIM_PRODUTO
DIM_LOJA
DIM_TEMPO
DIM_VENDEDOR

A tabela fato armazenava medidas:

  • quantidade;

  • valor;

  • desconto;

  • imposto;

  • margem.

As dimensões armazenavam contexto:

  • quem comprou;

  • o que comprou;

  • onde comprou;

  • quando comprou.

Esse modelo facilitava relatórios e análises.

Porém, exigia que a estrutura fosse definida antes da chegada dos dados.

Daí nasce a famosa lógica:

Primeiro modela. Depois carrega.


8. Por que o ETL era tão rígido?

Porque cada alteração precisava atravessar toda a cadeia.

Imagine que uma tabela de clientes receba um novo campo:

CANAL_PREFERENCIAL

Agora seria necessário alterar:

  1. o sistema de origem;

  2. o programa de extração;

  3. o arquivo intermediário;

  4. o layout;

  5. a tabela de staging;

  6. a transformação;

  7. a tabela destino;

  8. a documentação;

  9. os relatórios;

  10. os testes;

  11. o processo de implantação;

  12. os controles de reconciliação.

Para um programador COBOL, isso lembra a alteração de um copybook compartilhado por dezenas de programas.

Você muda um campo.

De repente, vinte módulos precisam ser recompilados.

Três interfaces quebram.

Um arquivo fica com LRECL incorreto.

Um job termina com S013.

Outro apresenta dados deslocados.

O operador liga às três horas da manhã.

A equipe inteira pergunta:

“Quem alterou o copybook?”

No ETL clássico, o mesmo fenômeno acontecia com pipelines de dados.


9. Ferramentas pesadas e lógica espalhada

Outro problema comum era a dispersão das regras.

Uma parte da lógica podia estar em:

  • um programa COBOL;

  • uma procedure SQL;

  • um job SSIS;

  • uma transformação PowerCenter;

  • um script Shell;

  • uma rotina Java;

  • um job Control-M;

  • uma stored procedure Oracle;

  • uma planilha mantida manualmente.

O resultado era uma arquitetura difícil de compreender.

Para descobrir como determinado campo era calculado, o analista precisava investigar cinco sistemas.

A regra podia começar em um programa COBOL, ser alterada em uma procedure e finalmente ser arredondada no relatório.

Era uma verdadeira investigação digna de Sherlock Holmes, Spock e do operador de produção mais experiente da empresa.


10. Então o que mudou?

Três transformações foram fundamentais.

10.1 O armazenamento ficou mais barato

Guardar grandes volumes de dados tornou-se economicamente viável.

Antes, armazenar tudo era um luxo.

Hoje, em muitas arquiteturas, preservar dados brutos é considerado uma vantagem.

10.2 O processamento tornou-se elástico

Plataformas modernas permitem aumentar ou reduzir capacidade conforme a necessidade.

Em vez de comprar uma máquina para o pico máximo, a empresa pode consumir recursos sob demanda.

10.3 O volume e a variedade dos dados explodiram

As organizações passaram a produzir:

  • logs;

  • eventos;

  • cliques;

  • imagens;

  • JSON;

  • XML;

  • telemetria;

  • dados de sensores;

  • mensagens;

  • documentos;

  • dados de redes sociais;

  • informações de aplicações móveis.

Transformar tudo antes da carga tornou-se lento e caro.

Assim nasceu a filosofia do ELT.


11. ELT: primeiro carrega, depois transforma

O ELT segue este fluxo:

Extract → Load → Transform

Primeiro, o dado é extraído.

Depois, é carregado praticamente como veio da origem.

Somente dentro da plataforma moderna ele é transformado.

A nova filosofia pode ser resumida assim:

“Preserve os dados primeiro. Decida depois como utilizá-los.”

Em vez de obrigar o dado a se adaptar imediatamente a um modelo rígido, o ELT preserva a informação original.

Isso aumenta a flexibilidade.


12. A camada Raw ou Bronze

Em arquiteturas modernas, os dados brutos costumam ser armazenados em uma camada chamada:

  • Raw;

  • Bronze;

  • Landing;

  • Ingestion;

  • Source.

Essa camada preserva o dado original.

Imagine que o mainframe envie um arquivo contendo:

00012320260716125000C0000000015000

O registro pode ser armazenado exatamente como chegou.

Depois, outras camadas interpretam os campos.

Uma arquitetura em camadas pode ser:

Bronze → Silver → Gold

Bronze

Dados brutos.

Pouco ou nenhum tratamento.

Silver

Dados limpos, padronizados e reconciliados.

Gold

Dados preparados para negócio, relatórios e indicadores.

Uma analogia mainframe seria:

Arquivo de entrada
       ↓
Arquivo validado
       ↓
Arquivo consolidado
       ↓
Relatório final

O conceito não é totalmente novo.

A novidade está na escala, nas ferramentas e na velocidade.


13. O que é um Data Lake?

Um Data Lake é um repositório capaz de armazenar grandes volumes de dados em diversos formatos.

Ele pode guardar:

  • arquivos CSV;

  • JSON;

  • Parquet;

  • imagens;

  • vídeos;

  • logs;

  • arquivos de áudio;

  • dados estruturados;

  • dados semiestruturados;

  • dados não estruturados.

A principal vantagem é a flexibilidade.

Porém, existe um risco.

Sem organização, governança e catálogo, o Data Lake pode virar um Data Swamp, ou pântano de dados.

Os arquivos estão lá, mas ninguém sabe:

  • quem criou;

  • qual versão é válida;

  • o que cada coluna significa;

  • se os dados estão completos;

  • se há informações sensíveis;

  • quem pode utilizá-los.

Curiosidade importante: guardar tudo não significa compreender tudo.

Um Data Lake sem governança pode ser apenas um gigantesco diretório de arquivos com nomes misteriosos.

Algo como:

FINAL.CSV
FINAL2.CSV
FINAL_CORRETO.CSV
FINAL_CORRETO_AGORA_VAI.CSV
FINAL_DEFINITIVO_V7.CSV

Todo profissional de tecnologia já encontrou uma pasta assim em algum momento da vida.


14. O que é um Data Lakehouse?

O Data Lakehouse tenta unir as vantagens do Data Lake e do Data Warehouse.

Do Data Lake, ele herda:

  • armazenamento flexível;

  • suporte a grandes volumes;

  • formatos variados;

  • custo reduzido.

Do Data Warehouse, ele herda:

  • organização;

  • consultas SQL;

  • desempenho;

  • governança;

  • controle de qualidade;

  • suporte a transações;

  • modelagem analítica.

Em termos simples:

Data Lake + Data Warehouse = Data Lakehouse

Não é uma soma perfeita, mas ajuda o COBOL Padawan a compreender o conceito.

O Lakehouse busca permitir que os mesmos dados sirvam para:

  • dashboards;

  • relatórios;

  • ciência de dados;

  • machine learning;

  • inteligência artificial;

  • auditoria;

  • análises exploratórias.


15. Change Data Capture: capturando apenas o que mudou

Um dos elementos mais importantes do ELT moderno é o CDC, ou Change Data Capture.

No processamento tradicional, uma tabela inteira podia ser extraída diariamente.

Imagine uma tabela com 500 milhões de registros.

Mesmo que apenas 10 mil registros tivessem mudado, o processo poderia copiar tudo novamente.

Isso consome:

  • CPU;

  • disco;

  • rede;

  • tempo;

  • janela batch;

  • paciência do operador.

O CDC captura apenas alterações:

  • INSERT;

  • UPDATE;

  • DELETE.

Exemplo:

Registro 1001 foi incluído
Registro 2050 foi alterado
Registro 3100 foi excluído

Essas mudanças são enviadas para a plataforma analítica.

No ecossistema mainframe, o CDC pode observar alterações em:

  • Db2;

  • IMS;

  • VSAM;

  • logs transacionais;

  • filas;

  • streams de eventos.

Isso permite integrar sistemas centrais com plataformas modernas sem executar extrações completas o tempo todo.


16. Batch não morreu

Existe uma ideia equivocada de que arquiteturas modernas eliminaram o batch.

Não eliminaram.

O batch continua extremamente importante.

Folhas de pagamento, fechamentos contábeis, consolidações financeiras, faturamento e processamento de grandes volumes ainda utilizam jobs em lote.

O que mudou foi a coexistência entre diferentes velocidades.

Hoje, uma arquitetura pode possuir:

  • batch diário;

  • microbatch a cada cinco minutos;

  • eventos em tempo real;

  • CDC quase imediato;

  • consultas sob demanda.

O mainframe também participa dessa arquitetura híbrida.

Um programa COBOL pode continuar processando arquivos à noite, enquanto alterações críticas são enviadas por CDC durante o dia.

Não é uma guerra entre antigo e moderno.

É uma federação de tecnologias.

E, como toda boa federação, cada membro possui sua função.


17. O papel do dbt na transformação moderna

O dbt, conhecido como data build tool, ajudou a transformar a maneira como as equipes escrevem SQL.

Antes, o SQL podia ficar espalhado por:

  • procedures;

  • scripts;

  • jobs;

  • ferramentas visuais;

  • notebooks;

  • arquivos locais.

O dbt trouxe práticas de engenharia de software para a transformação de dados.

Entre elas:

  • versionamento em Git;

  • testes;

  • documentação;

  • dependências;

  • modularização;

  • revisão de código;

  • integração contínua;

  • implantação automatizada.

Um modelo dbt pode ser semelhante a:

SELECT
    CUSTOMER_ID,
    SUM(AMOUNT) AS TOTAL_AMOUNT
FROM {{ ref('stg_transactions') }}
GROUP BY CUSTOMER_ID

A função ref declara que esse modelo depende de outro.

Assim, a ferramenta entende a ordem de execução.

Em vez de manter uma sequência escondida em dez agendadores diferentes, o pipeline passa a possuir um grafo claro de dependências.

Para o programador COBOL, isso pode ser comparado a mapear todos os programas chamados por um módulo principal.

PGMMAIN
 ├── CALL PGMCLI
 ├── CALL PGMCON
 └── CALL PGMREL

No dbt, a lógica é parecida:

RAW_CUSTOMER
      ↓
STG_CUSTOMER
      ↓
DIM_CUSTOMER
      ↓
REPORT_CUSTOMER

A diferença é que o grafo pode ser documentado e executado automaticamente.


18. O dbt resolve tudo?

Não.

O dbt resolve muito bem a parte de transformação SQL dentro de uma plataforma de dados.

Mas ele não é responsável por tudo.

Ele não substitui necessariamente:

  • ferramentas de ingestão;

  • mensageria;

  • CDC;

  • segurança;

  • governança;

  • catálogo;

  • monitoramento;

  • qualidade completa;

  • gestão de custos;

  • orquestração de toda a empresa.

É importante evitar a síndrome da ferramenta mágica.

Nenhuma ferramenta resolve sozinha arquitetura, processo, pessoas, governança e qualidade.

O dbt organiza muito bem o “T”.

Mas o restante da missão ainda precisa de uma tripulação.


19. Orquestração: o maestro do pipeline

A orquestração define:

  • o que executa primeiro;

  • o que depende de quê;

  • o que fazer em caso de falha;

  • quantas tentativas realizar;

  • quando disparar alertas;

  • quais prazos devem ser cumpridos.

No mainframe, JCL, JES2 e schedulers já exercem esse papel há décadas.

Considere:

//STEP01 EXEC PGM=EXTRATOR
//STEP02 EXEC PGM=TRANSFOR,COND=(0,NE,STEP01)
//STEP03 EXEC PGM=CARREGA,COND=(0,NE,STEP02)

O fluxo está claro:

  1. extrair;

  2. transformar;

  3. carregar.

Se o STEP01 falhar, os próximos podem não executar.

Ferramentas modernas fazem algo semelhante por meio de DAGs, grafos acíclicos direcionados.

O conceito parece novo, mas o veterano do mainframe olha para ele e pensa:

“Isso é uma cadeia de jobs com um nome mais elegante.”

E ele não está totalmente errado.


20. ETL versus ELT em uma tabela prática

CaracterísticaETL clássicoELT moderno
OrdemExtrai, transforma, carregaExtrai, carrega, transforma
Local da transformaçãoFora do destino analíticoDentro do Warehouse ou Lakehouse
Dados brutosFrequentemente descartadosNormalmente preservados
ModelagemAntes da cargaPode evoluir após a carga
FlexibilidadeMenorMaior
StorageTratado como recurso caroGeralmente mais acessível
ProcessamentoServidor ETL dedicadoPlataforma analítica
Mudança de schemaPode quebrar o pipelinePode ser absorvida com mais flexibilidade
Uso típicoDW tradicionalCloud Warehouse e Lakehouse
GovernançaForte antes da cargaDeve existir em múltiplas camadas

21. ETL ainda é útil?

Sim, e muito.

O ELT não matou o ETL.

Existem situações em que transformar antes de carregar é obrigatório.

Por exemplo:

  • dados pessoais que precisam ser mascarados;

  • informações médicas;

  • dados bancários;

  • números de documentos;

  • segredos comerciais;

  • restrições regulatórias;

  • limites de residência de dados;

  • necessidade de reduzir volumes;

  • destino com capacidade limitada.

Imagine um arquivo contendo CPF, salário e informações de saúde.

Carregar tudo em uma plataforma sem proteção e decidir depois o que mascarar seria perigoso.

Nesse caso, parte da transformação precisa ocorrer antes da carga.

Portanto, muitas arquiteturas modernas usam uma abordagem híbrida:

Extração
   ↓
Mascaramento e validação
   ↓
Carga na camada bruta protegida
   ↓
Transformações analíticas

É uma combinação de ETL e ELT.


22. O mainframe dentro da arquitetura moderna

O IBM Z não está fora dessa evolução.

Na verdade, ele frequentemente é a origem dos dados mais importantes da empresa.

Sistemas mainframe podem armazenar:

  • contas bancárias;

  • apólices;

  • cartões;

  • pedidos;

  • estoques;

  • reservas;

  • folhas de pagamento;

  • transações governamentais;

  • informações fiscais;

  • cadastros de clientes.

Uma arquitetura moderna pode ser:

CICS / IMS / COBOL
          ↓
Db2 / VSAM / IMS DB
          ↓
CDC / MQ / API / Arquivo
          ↓
Data Lakehouse
          ↓
dbt
          ↓
Modelo analítico
          ↓
Power BI / Tableau / Qlik
          ↓
IA e Machine Learning

Observe que o programa COBOL não desapareceu.

Ele continua processando a transação central.

O que mudou foi a forma de distribuir e explorar os dados produzidos por ele.


23. Exemplo completo: dados de cartão de crédito

Vamos construir um exemplo.

Um sistema COBOL processa compras de cartão.

Cada transação contém:

NUMERO-CARTAO
DATA-HORA
ESTABELECIMENTO
VALOR
PAIS
CODIGO-RESPOSTA

No ETL clássico

  1. O COBOL gera um arquivo ao final do dia.

  2. O arquivo é enviado ao servidor de ETL.

  3. A ferramenta valida os registros.

  4. Os dados são enriquecidos.

  5. As moedas são convertidas.

  6. Transações inválidas são separadas.

  7. Os dados prontos são carregados no DW.

  8. O relatório é atualizado pela manhã.

No ELT moderno

  1. As transações são capturadas por CDC ou streaming.

  2. Os dados brutos são carregados no Lakehouse.

  3. Uma camada Silver padroniza moedas e datas.

  4. Uma camada Gold calcula indicadores.

  5. O dashboard é atualizado em intervalos menores.

  6. Um modelo de fraude analisa padrões quase em tempo real.

O sistema COBOL continua sendo a fonte confiável.

O ELT amplia as formas de consumir seus dados.


24. Qualidade de dados continua sendo obrigatória

Um dos maiores perigos do ELT é interpretar “carregar tudo” como “aceitar qualquer coisa sem controle”.

Isso seria um erro.

Dados brutos podem ser preservados, mas precisam de:

  • catálogo;

  • segurança;

  • linhagem;

  • classificação;

  • testes;

  • monitoramento;

  • regras de retenção;

  • controle de acesso.

Testes comuns incluem:

Teste de unicidade

CUSTOMER_ID não pode se repetir.

Teste de nulidade

ACCOUNT_ID não pode ser nulo.

Teste de integridade

Todo CUSTOMER_ID de ACCOUNT deve existir em CUSTOMER.

Teste de domínio

STATUS deve ser A, I ou B.

Teste de volume

A carga diária não pode cair 90% sem gerar alerta.

Qualidade de dados não desaparece no ELT.

Ela apenas muda de lugar e se torna mais automatizada.


25. Schema-on-write e schema-on-read

Uma diferença conceitual importante é a relação entre dados e esquema.

Schema-on-write

O esquema é definido antes da gravação.

Isso é comum no Data Warehouse clássico.

Definir tabela
      ↓
Validar formato
      ↓
Carregar dados

Schema-on-read

O dado é armazenado primeiro.

O esquema é aplicado quando ele é lido.

Armazenar dado bruto
      ↓
Interpretar conforme a necessidade

O ETL tradicional está mais próximo do schema-on-write.

O Data Lake está mais próximo do schema-on-read.

O Lakehouse tenta equilibrar os dois.


26. Curiosidades para o COBOL Padawan

Curiosidade 1 — O batch já fazia pipelines

Muito antes de “pipeline de dados” virar expressão de moda, equipes mainframe já encadeavam jobs com JCL e schedulers.

Curiosidade 2 — Staging não é invenção recente

Datasets temporários, arquivos intermediários e tabelas de trabalho existem há décadas.

Curiosidade 3 — CDC também não nasceu ontem

A captura de alterações em logs transacionais possui uma longa história em bancos corporativos.

Curiosidade 4 — SQL virou código de engenharia

Ferramentas modernas aproximaram SQL de práticas já comuns em linguagens como COBOL, Java e Python: versionamento, testes e revisão.

Curiosidade 5 — ELT pode gerar custos enormes

Carregar tudo é fácil. Processar tudo repetidamente pode ser caro.

Uma query mal escrita em uma plataforma elástica pode escalar muito bem — inclusive a conta.


27. Dicas práticas para o programador COBOL iniciante

Dica 1 — Aprenda SQL de verdade

Entenda:

  • JOIN;

  • GROUP BY;

  • funções de janela;

  • CTE;

  • agregações;

  • tratamento de nulos;

  • datas;

  • performance.

O SQL é uma ponte entre o mainframe e a engenharia de dados moderna.

Dica 2 — Entenda arquivos

Continue dominando:

  • FB;

  • VB;

  • LRECL;

  • EBCDIC;

  • ASCII;

  • delimitadores;

  • copybooks;

  • packed decimal;

  • zoned decimal.

Grande parte dos problemas de integração nasce no formato dos dados.

Dica 3 — Aprenda JSON e APIs

Sistemas modernos frequentemente trocam dados em JSON.

Compreender APIs REST e z/OS Connect amplia muito o horizonte do programador COBOL.

Dica 4 — Estude Git

Versionamento não é exclusivo do código Java.

SQL, JCL, scripts, modelos dbt e documentação também devem ser versionados.

Dica 5 — Aprenda conceitos, não apenas ferramentas

Ferramentas mudam.

Os conceitos permanecem:

  • extração;

  • transformação;

  • carga;

  • dependência;

  • qualidade;

  • reconciliação;

  • governança;

  • observabilidade.

Dica 6 — Nunca ignore reconciliação

Sempre compare:

Registros extraídos
Registros transformados
Registros rejeitados
Registros carregados

A equação precisa fechar.

Extraídos = Carregados + Rejeitados

Quando não fecha, existe um fantasma no pipeline.


28. Passo a passo para compreender uma arquitetura de dados

Quando encontrar um pipeline, faça estas perguntas.

Passo 1 — Qual é a origem?

Db2?

VSAM?

IMS?

API?

Arquivo?

ERP?

Passo 2 — Como os dados são extraídos?

Batch?

CDC?

Streaming?

API?

Unload?

Passo 3 — Onde os dados brutos ficam?

Staging?

Data Lake?

Tabela temporária?

Dataset?

Passo 4 — Onde ocorre a transformação?

Programa COBOL?

Ferramenta ETL?

SQL?

dbt?

Spark?

Passo 5 — Quem orquestra?

JES2?

Control-M?

Airflow?

Scheduler de nuvem?

Passo 6 — Como a qualidade é validada?

Contagens?

Testes automáticos?

Regras de integridade?

Passo 7 — Quem consome?

Power BI?

Relatório batch?

Aplicação?

IA?

Auditoria?

Passo 8 — Como falhas são tratadas?

Restart?

Retry?

Checkpoint?

Reprocessamento?

Rollback?

Essas perguntas revelam a arquitetura real, independentemente das ferramentas utilizadas.


29. Easter egg: a diretiva secreta do ETL

Nos arquivos perdidos da Federação, existe uma suposta diretiva de engenharia de dados conhecida como Diretiva ETL-1701:

“Nenhum dado deverá entrar no computador central da nave antes de ser validado, padronizado e aprovado pelo oficial de ciência.”

Essa era a filosofia do ETL clássico.

Anos depois, durante uma missão em um quadrante desconhecido, a tripulação percebeu que descartar dados considerados inúteis poderia eliminar pistas valiosas.

Nasceu então a Diretiva ELT-1701-D:

“Preserve o dado original. A informação aparentemente irrelevante de hoje pode ser a chave lógica da missão de amanhã.”

A letra D, naturalmente, é uma homenagem à Enterprise-D.

Coincidência?

Talvez.

Mas no Bellacosa Mainframe, coincidências tecnológicas costumam esconder um dataset catalogado.


30. ETL ou ELT: qual é melhor?

A resposta lógica é:

Depende.

Use ETL quando:

  • dados precisam ser protegidos antes da carga;

  • o volume deve ser reduzido;

  • o destino possui limitações;

  • regras precisam ser aplicadas previamente;

  • a governança exige forte controle antecipado.

Use ELT quando:

  • deseja preservar dados brutos;

  • precisa de flexibilidade;

  • utiliza uma plataforma analítica poderosa;

  • pretende criar múltiplos modelos;

  • trabalha com ciência de dados e IA;

  • precisa reprocessar históricos.

Use uma arquitetura híbrida quando:

  • segurança e flexibilidade são igualmente importantes;

  • existem sistemas legados e modernos;

  • parte das regras deve ocorrer antes da carga;

  • outras transformações podem acontecer depois.

Na maioria das grandes empresas, essa última opção é a mais realista.


Conclusão: o T apenas mudou de cabine

A evolução do ETL para o ELT representa muito mais do que a inversão de duas letras.

O ETL nasceu em um mundo no qual armazenamento e processamento eram caros. Por isso, os dados precisavam ser limpos, filtrados e modelados antes de entrar no Data Warehouse.

O ELT ganhou força em um mundo de armazenamento abundante, plataformas elásticas, nuvem, grandes volumes, inteligência artificial e necessidades analíticas que mudam rapidamente.

No ETL, o modelo decide o que entra.

No ELT, o dado entra primeiro e o modelo pode nascer depois.

Entretanto, isso não significa que o ETL esteja ultrapassado, que o batch tenha morrido ou que o mainframe tenha ficado para trás.

Muito pelo contrário.

Os sistemas COBOL, Db2, IMS, VSAM e CICS continuam gerando os dados mais críticos de inúmeras empresas. A diferença é que agora esses dados podem viajar por CDC, APIs, MQ, arquivos e eventos até plataformas modernas, nas quais são transformados, testados, modelados e utilizados em dashboards, algoritmos e aplicações de inteligência artificial.

O programador COBOL Padawan que compreende ETL e ELT deixa de enxergar apenas o programa e começa a enxergar a jornada completa do dado.

Ele entende de onde o registro nasceu.

Como foi extraído.

Onde foi armazenado.

Que regras foram aplicadas.

Quem consumiu a informação.

E o que acontece quando alguma etapa falha.

Essa visão transforma um simples programador em um verdadeiro engenheiro de sistemas corporativos.

No fim, o “T” não desapareceu.

Ele apenas mudou de posição.

Mudou de servidor.

Mudou de ferramenta.

Mudou de cabine na Enterprise.

Mas continua sendo responsável por uma das tarefas mais importantes de toda a engenharia de dados: transformar registros isolados em informação confiável.

E, como diria o Sr. Spock diante de um pipeline perfeitamente reconciliado:

“Dados sem contexto são apenas registros. Dados transformados com lógica tornam-se conhecimento.”

Vida longa ao COBOL.

Vida longa ao SQL.

E vida longa aos pipelines que conectam o IBM Z ao futuro.

segunda-feira, 5 de fevereiro de 2018

segunda-feira, 9 de janeiro de 2017

Regex sem Mistérios — A Linguagem Secreta que Todo Programador COBOL Padawan Precisa Conhecer

 

Bellacosa Mainframe e o regex sem misterios

☕ Um Café no Bellacosa Mainframe

Regex sem Mistérios — A Linguagem Secreta que Todo Programador COBOL Padawan Precisa Conhecer

Como encontrar, validar, limpar e transformar dados caóticos usando Expressões Regulares — com exemplos, curiosidades, armadilhas e analogias dignas da Frota Estelar

Existe um momento inevitável na carreira de qualquer profissional de tecnologia.

Você recebe um arquivo.

À primeira vista, parece apenas mais um CSV inofensivo vindo de algum sistema legado, planilha departamental, parceiro comercial, API moderna ou aplicação construída às pressas numa sexta-feira à tarde.

Então você abre o arquivo.

E encontra isto:

JOAO   DA SILVA
João da Silva
 joao da silva
JOAO DA SILVA     

Depois aparecem os telefones:

11999999999
(11) 99999-9999
+55 11 99999-9999
11-99999-9999
99999 9999

Logo abaixo, as datas:

17/07/2026
2026-07-17
17-07-26
20260717
Jul 17, 2026

E, como se a tripulação tivesse entrado em uma anomalia temporal, surgem e-mails sem domínio, endereços IP impossíveis, preços com ponto e vírgula trocados, espaços em excesso e descrições misturadas com informações entre parênteses.

Nesse instante, o programador percebe que o problema não é apenas “ler o arquivo”.

O problema é reconhecer padrões dentro do caos.

É aí que entra a Regex.

Regex é a abreviação de Regular Expression, ou Expressão Regular. Trata-se de uma pequena linguagem especializada em localizar, validar, extrair, substituir e reorganizar padrões dentro de textos.

Pode parecer estranha no começo.

Uma Regex típica se parece com isso:

^[\w.-]+@[\w.-]+\.\w{2,}$

Para quem está começando, isso parece uma mensagem interceptada de uma nave romulana.

Mas, quando desmontamos a expressão peça por peça, tudo começa a fazer sentido.

E esse é o objetivo desta missão: mostrar que Regex não é magia negra, não é privilégio de cientistas de dados e tampouco exige decorar centenas de símbolos.

Você precisa aprender a enxergar os componentes.

Assim como um programa COBOL é construído com IDENTIFICATION DIVISION, DATA DIVISION, PROCEDURE DIVISION, campos PIC, condições, PERFORM e IF, uma Regex também é formada por pequenos blocos previsíveis.

Prepare o café, ajuste o uniforme da Frota e abra o terminal.

Nossa missão começa agora.


1. O que é uma Expressão Regular?

Uma Expressão Regular é uma descrição compacta de um padrão textual.

Imagine que você deseja encontrar todas as matrículas formadas por três letras seguidas de quatro números:

ABC1234
XPTO9876
ZOS2026

Você poderia procurar cada matrícula individualmente.

Mas isso seria impossível se existissem milhares delas.

Com Regex, você descreve o formato:

[A-Z]{3}\d{4}

Essa expressão significa:

[A-Z]  → uma letra maiúscula
{3}    → repetida exatamente três vezes
\d     → um dígito
{4}    → repetido exatamente quatro vezes

Portanto:

[A-Z]{3}\d{4}

significa:

encontre três letras maiúsculas seguidas de quatro números.

A Regex não precisa saber quais letras ou números aparecerão. Ela sabe apenas qual estrutura deve procurar.

Isso muda completamente a maneira de lidar com textos.


2. Regex é como uma cláusula PIC do COBOL

Para um programador COBOL, existe uma comparação especialmente útil.

Considere:

01 WS-CODIGO PIC X(3)9(4).

Esse campo espera:

  • três caracteres alfanuméricos;

  • quatro dígitos.

Em Regex, um padrão semelhante poderia ser:

^[A-Z]{3}\d{4}$

As duas construções descrevem um formato esperado.

A diferença é que a cláusula PIC define como o dado será armazenado em um campo COBOL, enquanto a Regex procura ou valida padrões em textos.

Podemos imaginar que a Regex é uma espécie de PIC móvel.

Ela percorre uma linha, um arquivo, uma página, um log ou uma coluna inteira procurando ocorrências compatíveis.

Essa analogia é poderosa porque retira a Regex do território do mistério.

Você já conhece a ideia.

Apenas muda a sintaxe.


3. Onde Regex aparece?

Muitos programadores COBOL acreditam que Regex pertence apenas ao mundo de JavaScript ou Python.

Nada poderia estar mais distante da realidade moderna.

Regex aparece em:

  • editores de texto;

  • ferramentas de ETL;

  • scripts Python;

  • Bash;

  • PowerShell;

  • Java;

  • JavaScript;

  • C#;

  • bancos de dados;

  • ferramentas de Data Analytics;

  • pipelines de DevOps;

  • Jenkins;

  • Git;

  • VS Code;

  • Notepad++;

  • Zowe;

  • Unix System Services;

  • análise de logs;

  • observabilidade;

  • segurança;

  • parsing de arquivos;

  • validação de APIs;

  • transformação de CSV;

  • tratamento de JSON e XML.

No universo IBM Z, talvez você não execute Regex diretamente em um programa COBOL tradicional, mas certamente poderá encontrá-la em scripts auxiliares, automações, pipelines, arquivos YAML, utilitários Linux, integrações REST e processos de modernização.

O mainframe não vive isolado.

Ele conversa com o restante da galáxia.

E Regex é um dos idiomas usados nessas comunicações.


4. Os símbolos fundamentais da Regex

Antes de estudar os quinze padrões essenciais, precisamos conhecer as peças básicas.

O ponto: .

Em Regex, o ponto normalmente representa qualquer caractere.

a.c

Pode encontrar:

abc
a1c
a-c
a_c

O ponto não significa necessariamente um ponto literal.

Para procurar um ponto verdadeiro, usamos:

\.

Esse detalhe é extremamente importante.

A expressão:

\d+.\d+

aceita:

12.50
12,50
12X50

Porque o ponto significa qualquer caractere.

A versão mais correta seria:

\d+\.\d+

Agora, o separador precisa ser realmente um ponto.


O asterisco: *

Representa zero ou mais ocorrências.

AB*

Pode aceitar:

A
AB
ABB
ABBBBB

O B pode não aparecer ou aparecer várias vezes.


O sinal de mais: +

Representa uma ou mais ocorrências.

AB+

Aceita:

AB
ABB
ABBBBB

Mas não aceita apenas:

A

O ponto de interrogação: ?

Indica que o elemento anterior é opcional.

https?

Aceita:

http
https

O s pode existir ou não.


Os colchetes: []

Definem uma classe de caracteres.

[ABC]

Procura:

A
B
C

Já:

[A-Z]

representa qualquer letra maiúscula entre A e Z.

E:

[0-9]

representa qualquer dígito.


\d

Representa um dígito.

\d

É semelhante a:

[0-9]

\w

Normalmente representa letras, números e sublinhado.

\w

Pode encontrar:

A
z
5
_

O comportamento exato pode variar conforme o mecanismo Regex e o suporte a Unicode.


\s

Representa caracteres de espaço em branco.

Pode incluir:

  • espaço normal;

  • tabulação;

  • quebra de linha;

  • retorno de carro.


Circunflexo: ^

Indica o começo da string ou da linha.

^ABC

Encontra:

ABC123

Mas não encontra:

000ABC123

Cifrão: $

Indica o final da string ou da linha.

XYZ$

Encontra:

123XYZ

Mas não:

XYZ123

Quando usamos:

^\d+$

estamos dizendo:

do começo ao fim, aceite somente dígitos.


Chaves: {}

Controlam quantidades.

\d{4}

Exatamente quatro dígitos.

\d{2,4}

Entre dois e quatro dígitos.

\d{2,}

Dois ou mais dígitos.


Parênteses: ()

Criam grupos.

(ABC)+

Pode encontrar:

ABC
ABCABC
ABCABCABC

Os grupos também podem capturar partes específicas do texto.


Barra vertical: |

Significa “ou”.

COBOL|PL/I|REXX

Encontra qualquer uma das três palavras.


5. Padrão 1 — Endereço de e-mail

Uma expressão prática para e-mails simples é:

^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$

Vamos desmontar:

^

Começo da string.

[\w.-]+

Uma ou mais letras, números, sublinhados, pontos ou hífens.

@

O caractere arroba obrigatório.

[\w.-]+

O domínio.

\.

Um ponto literal.

[A-Za-z]{2,}

Uma extensão com pelo menos duas letras.

$

Fim da string.

Aceita:

usuario@gmail.com
vagner.bellacosa@empresa.com.br
programador-cobol@mainframe.org

Rejeita:

usuario@
@empresa.com
usuario.com
usuario@empresa

Porém existe uma observação importante.

E-mails reais podem seguir regras muito complexas. O padrão oficial permite formatos que quase nunca vemos no dia a dia.

Portanto, uma Regex simples é excelente para detectar erros comuns, mas não deve ser considerada uma implementação completa de todas as regras possíveis de e-mail.

Uma dica prática: em sistemas reais, muitas vezes o melhor teste de e-mail é enviar uma mensagem de confirmação.

A Regex valida o formato.

O envio confirma a existência operacional.


6. Padrão 2 — Número de telefone

Telefone é um dos maiores desafios de validação.

Considere:

+55 11 99999-9999
(11) 99999-9999
11 99999 9999
11999999999
+1 (555) 123-4567

Não existe uma única Regex perfeita para todos os países.

Uma expressão prática para formatos brasileiros poderia ser:

^(?:\+55\s?)?(?:\(?\d{2}\)?\s?)?\d{4,5}[-\s]?\d{4}$

Ela permite:

  • código do Brasil opcional;

  • DDD opcional;

  • parênteses opcionais;

  • espaço ou hífen opcional;

  • telefone com oito ou nove dígitos locais.

Mesmo assim, formato válido não significa número existente.

Uma Regex pode aceitar:

(00) 00000-0000

Embora isso não represente um telefone real utilizável.

Em aplicações internacionais, o ideal é normalizar os dados e trabalhar com um padrão como E.164:

+5511999999999

Esse formato remove espaços, parênteses e hífens, preservando apenas o sinal de mais, o código do país e o número.


7. Padrão 3 — Data no formato DD/MM/AAAA

Uma expressão comum é:

\b(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[0-2])/\d{4}\b

Ela limita:

  • dia entre 01 e 31;

  • mês entre 01 e 12;

  • ano com quatro dígitos.

Aceita:

17/07/2026
01/01/2000
31/12/1999

Mas pode aceitar:

31/02/2026

Por quê?

Porque Regex reconhece formato, não necessariamente lógica de calendário.

Ela sabe que 31 está dentro de 01 a 31.

Ela sabe que 02 está dentro de 01 a 12.

Mas não sabe automaticamente que fevereiro não possui 31 dias.

Para validar datas reais, o procedimento recomendado é:

  1. usar Regex para verificar o formato;

  2. converter o texto para um tipo de data;

  3. deixar a linguagem ou banco de dados validar o calendário.

É o equivalente a uma primeira inspeção feita pelo sensor da nave, seguida por uma análise completa no computador de bordo.


8. Padrão 4 — Data ISO AAAA-MM-DD

\b\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])\b

Aceita:

2026-07-17
2025-12-31
2000-01-01

O formato ISO é excelente porque organiza as partes da maior para a menor:

ano-mês-dia

Isso traz vantagens para ordenação textual.

Considere:

2024-12-31
2025-01-01
2026-07-17

Mesmo como texto, a ordem cronológica é preservada.

Por isso, esse formato aparece em:

  • APIs;

  • bancos de dados;

  • logs;

  • arquivos CSV;

  • integrações;

  • sistemas distribuídos;

  • aplicações modernas.

Para um programador COBOL envolvido com APIs e modernização, o formato ISO deve se tornar um velho amigo.


9. Padrão 5 — Horário HH:MM

\b([01][0-9]|2[0-3]):[0-5][0-9]\b

Aceita:

00:00
09:30
18:45
23:59

Rejeita:

24:00
12:99
99:99

A primeira parte:

([01][0-9]|2[0-3])

aceita horas de 00 a 23.

A segunda:

[0-5][0-9]

aceita minutos de 00 a 59.

Essa expressão é muito útil para:

  • logs de processamento batch;

  • registros de ponto;

  • agendas;

  • monitoramento;

  • relatórios operacionais;

  • arquivos de auditoria.


10. Padrão 6 — URL

Uma Regex simples:

https?://[^\s]+

Significa:

http
seguido de um s opcional
seguido de ://
seguido de um ou mais caracteres que não sejam espaços

Aceita:

https://www.ibm.com
http://servidor.local/relatorio
https://exemplo.com/api/clientes?id=10

Essa expressão é útil para extração, mas não valida toda a estrutura de uma URL.

Também pode capturar pontuação colada no final:

Acesse https://exemplo.com.

Dependendo do mecanismo, o ponto final poderá entrar na captura.

Podemos refinar o padrão, mas existe uma lição importante:

quanto mais perfeita tentamos tornar uma Regex, mais complexa e difícil de manter ela pode ficar.

Regex deve resolver o problema necessário, não todos os problemas possíveis do universo.


11. Padrão 7 — Nome de domínio

Uma expressão prática:

\b(?:[A-Za-z0-9-]+\.)+[A-Za-z]{2,}\b

Pode encontrar:

ibm.com
empresa.com.br
portal.exemplo.org
mainframe.local

Esse tipo de extração aparece em:

  • análise de leads;

  • classificação de empresas;

  • segurança;

  • logs;

  • marketing;

  • inventário de URLs;

  • descoberta de integrações.

Por exemplo, a partir do e-mail:

usuario@empresa.com.br

podemos extrair:

empresa.com.br

E então agrupar contatos por organização.


12. Padrão 8 — Endereço IPv4

Uma expressão estrutural simples:

\b(?:\d{1,3}\.){3}\d{1,3}\b

Ela encontra:

192.168.0.1
10.0.0.25
172.16.1.100

Porém também pode aceitar:

999.999.999.999

Isso acontece porque cada bloco aceita de um a três dígitos, sem verificar o limite de 255.

Uma versão mais rigorosa é:

\b(?:(?:25[0-5]|2[0-4]\d|1?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|1?\d?\d)\b

Essa expressão é mais precisa, mas também muito menos legível.

Aqui surge uma decisão de engenharia:

  • você precisa apenas extrair valores com aparência de IP?

  • ou precisa validar endereços IPv4 rigorosamente?

Para extração inicial de logs, a versão simples pode bastar.

Para segurança ou configuração de rede, a versão rigorosa ou uma biblioteca de IP é mais apropriada.


13. Padrão 9 — Valores monetários

Valores monetários são traiçoeiros porque cada país usa formatos diferentes.

Brasil:

R$ 1.299,99
R$ 25,00
1.000.000,50

Estados Unidos:

$1,299.99
$25.00
1,000,000.50

Uma expressão básica para valores brasileiros:

R\$\s?\d{1,3}(?:\.\d{3})*(?:,\d{2})?

Aceita:

R$ 25
R$ 1.299,99
R$ 10.000.000,50

Uma expressão básica para valores em dólares:

\$\s?\d{1,3}(?:,\d{3})*(?:\.\d{2})?

Nunca assuma o separador decimal sem conhecer a origem do dado.

Um erro de interpretação pode transformar:

1.234

em mil duzentos e trinta e quatro ou em um vírgula duzentos e trinta e quatro, dependendo da convenção utilizada.

Em sistemas financeiros, esse detalhe não é cosmético.

É crítico.


14. Padrão 10 — Percentuais

\b\d+(?:[.,]\d+)?%

Aceita:

18%
42,5%
98.75%

A parte:

(?:[.,]\d+)?

permite uma parte decimal opcional com ponto ou vírgula.

Mas novamente devemos perguntar:

  • o valor máximo é 100%?

  • valores acima de 100% são permitidos?

  • números negativos são válidos?

  • deve haver espaço antes do sinal de porcentagem?

Em relatórios de crescimento, isto pode ser válido:

250%

Em progresso de uma tarefa, talvez não.

A Regex deve refletir a regra do negócio, não apenas a aparência do dado.


15. Padrão 11 — Somente números

^\d+$

É uma das expressões mais úteis de todas.

Ela verifica se a string inteira possui apenas dígitos.

Aceita:

12345
000001
987654321

Rejeita:

123A
12-34
 123
123 

Pode ser utilizada para validar:

  • matrícula;

  • código de cliente;

  • CPF sem máscara;

  • número de lote;

  • quantidade;

  • identificador numérico.

Mas cuidado: um campo formado apenas por dígitos não é necessariamente um número matemático.

Um CPF, CEP ou código de cliente pode começar com zero.

Se convertermos:

001234

para número, podemos obter:

1234

e perder informação.

Isso também é familiar ao programador COBOL.

Nem todo PIC 9 representa um valor que deve participar de cálculos. Às vezes ele é apenas um identificador composto por caracteres numéricos.


16. Padrão 12 — Número decimal

^-?\d+(?:\.\d+)?$

Aceita:

10
10.5
-25
-25.75

A parte:

-?

permite um sinal negativo opcional.

A parte:

\d+

exige pelo menos um dígito.

E:

(?:\.\d+)?

permite uma parte decimal opcional.

Para vírgula decimal brasileira:

^-?\d+(?:,\d+)?$

Ou, para aceitar ambos:

^-?\d+(?:[.,]\d+)?$

Entretanto, aceitar os dois formatos pode gerar ambiguidades em dados com separadores de milhar.

A melhor estratégia costuma ser:

  1. identificar o padrão de origem;

  2. remover separadores de milhar;

  3. normalizar o separador decimal;

  4. converter para número.


17. Padrão 13 — Remover espaços extras

\s+

Substitua por um único espaço:

" "

Antes:

Analista       de      Sistemas

Depois:

Analista de Sistemas

Esse padrão é extremamente poderoso.

Mas ele também pode substituir:

  • tabs;

  • quebras de linha;

  • múltiplos espaços.

Portanto, se você estiver trabalhando com um texto multilinha, pode acabar transformando parágrafos inteiros em uma única linha.

Para espaços horizontais apenas, alguns mecanismos oferecem:

[ \t]+

Isso procura espaços e tabulações, mas não quebras de linha.

Sempre teste a substituição em uma cópia do arquivo.

A primeira diretriz da Frota Estelar de tratamento de dados deveria ser:

nunca execute uma transformação destrutiva sem possuir backup e uma amostra de validação.


18. Padrão 14 — Remover espaços do começo e do final

^\s+|\s+$

Significa:

espaços no começo
OU
espaços no final

Antes:

"     Power BI Dashboard      "

Depois:

"Power BI Dashboard"

Essa operação é chamada de trim.

Em linguagens modernas, normalmente existe uma função pronta para isso.

Mesmo assim, a Regex é útil quando estamos fazendo substituições em massa dentro de um editor, ferramenta ETL ou arquivo inteiro.


19. Padrão 15 — Texto dentro de parênteses

Para capturar o conteúdo entre parênteses:

\((.*?)\)

Considere:

Plano Corporativo (Premium)

A captura será:

Premium

Os parênteses literais precisam ser escapados:

\(
\)

O trecho:

.*

significa qualquer caractere, zero ou mais vezes.

O ponto de interrogação torna a busca não gulosa:

.*?

Isso significa que a Regex captura o mínimo necessário.

Sem o ?, em:

Produto (Azul) Tamanho (Grande)

uma expressão gulosa poderia capturar:

(Azul) Tamanho (Grande)

Com:

\((.*?)\)

ela pode capturar separadamente:

Azul
Grande

O conceito de busca gulosa é uma das curiosidades mais importantes da Regex.

Um quantificador guloso tenta consumir o máximo possível.

Um quantificador não guloso tenta consumir o mínimo necessário.


20. Regex encontra formato, não verdade

Esta é provavelmente a lição mais importante de todo o artigo.

Uma Regex pode reconhecer que:

usuario@empresa.com

tem aparência de e-mail.

Mas não sabe se a caixa postal existe.

Pode reconhecer:

31/02/2026

como uma data estruturada.

Mas não sabe se o dia existe no calendário.

Pode reconhecer:

999.999.999.999

como algo semelhante a IPv4, dependendo da expressão.

Mas não sabe automaticamente que os octetos são inválidos.

Pode reconhecer:

R$ 999999999999

como valor monetário.

Mas não sabe se o valor faz sentido para aquela transação.

Regex trabalha na camada sintática.

A lógica de negócio trabalha na camada semântica.

Em linguagem de Frota Estelar:

Regex é o scanner. A aplicação é o oficial científico que interpreta o resultado.


21. Passo a passo para construir uma Regex

Não comece tentando escrever a expressão inteira.

Siga um processo.

Passo 1 — Reúna exemplos válidos

Imagine códigos:

CLI-0001
CLI-1025
CLI-9999

Passo 2 — Reúna exemplos inválidos

CLI0001
cli-0001
CLI-001
CLI-12345

Passo 3 — Identifique partes fixas

CLI-

Passo 4 — Identifique partes variáveis

Quatro dígitos:

\d{4}

Passo 5 — Monte o padrão

CLI-\d{4}

Passo 6 — Ancore o começo e o final

^CLI-\d{4}$

Passo 7 — Teste casos extremos

CLI-0000
CLI-9999
CLI-12A4
XCLI-0001
CLI-0001-TESTE

Passo 8 — Documente

Explique o que a Regex faz.

Não deixe apenas:

^(?:\+55\s?)?(?:\(?\d{2}\)?\s?)?\d{4,5}[-\s]?\d{4}$

Adicione um comentário no código ou documentação.

Uma Regex não documentada pode se tornar um artefato klingon perdido dentro do sistema.

Todos têm medo de alterá-la.

Ninguém sabe exatamente o que ela faz.


22. Regex em Python — pequeno laboratório

import re

dados = [
    "usuario@gmail.com",
    "email-invalido",
    "programador@empresa.com.br"
]

padrao = re.compile(r"^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$")

for valor in dados:
    if padrao.fullmatch(valor):
        print(f"Válido: {valor}")
    else:
        print(f"Inválido: {valor}")

Resultado esperado:

Válido: usuario@gmail.com
Inválido: email-invalido
Válido: programador@empresa.com.br

Observe o prefixo r antes da string:

r"..."

Em Python, isso cria uma raw string, reduzindo conflitos entre as barras invertidas da linguagem e as barras utilizadas pela Regex.


23. Regex no PowerShell

No Windows, um Padawan pode experimentar:

$email = "usuario@empresa.com"

if ($email -match '^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$') {
    Write-Host "E-mail válido"
} else {
    Write-Host "E-mail inválido"
}

Para substituir espaços repetidos:

$texto = "Programador      COBOL      Padawan"
$limpo = $texto -replace '\s+', ' '

Write-Host $limpo

Resultado:

Programador COBOL Padawan

24. Regex no Linux e no USS

Com grep:

grep -E '^[0-9]+$' arquivo.txt

Isso procura linhas compostas apenas por números.

Para encontrar datas ISO:

grep -E '\b[0-9]{4}-[0-9]{2}-[0-9]{2}\b' aplicacao.log

Com sed, podemos reduzir espaços:

sed -E 's/[[:space:]]+/ /g' arquivo.txt

No Unix System Services do z/OS, esses recursos podem fazer parte de scripts de automação, preparação de dados, análise de logs e pipelines DevOps.


25. Armadilhas comuns

Esquecer de escapar o ponto

Errado:

\d+.\d+

Melhor:

\d+\.\d+

Usar Regex para tudo

Regex não é a melhor ferramenta para interpretar estruturas profundamente aninhadas.

Tentar processar JSON ou XML complexo inteiramente com Regex costuma produzir soluções frágeis.

Para JSON, use um parser JSON.

Para XML, use um parser XML.

Use Regex para tarefas localizadas, como identificar padrões simples antes ou depois do parsing.


Criar uma expressão impossível de manter

Uma Regex gigantesca pode funcionar, mas tornar a manutenção perigosa.

Às vezes é melhor dividir a validação em etapas:

  1. normalizar;

  2. verificar formato;

  3. converter;

  4. aplicar regra de negócio.


Não considerar Unicode e acentos

Padrões como:

[A-Za-z]

não incluem automaticamente:

á
é
ç
õ
ü

Dependendo da linguagem, você pode usar recursos Unicode, propriedades como \p{L} ou flags específicas.


Não testar casos negativos

Muitas pessoas testam apenas entradas válidas.

Uma boa bateria de testes deve conter:

  • entradas válidas;

  • entradas inválidas;

  • valores vazios;

  • espaços;

  • caracteres especiais;

  • limites máximos;

  • limites mínimos;

  • texto muito longo;

  • acentos;

  • valores nulos.


26. Dicas de sobrevivência para o Padawan

Primeira dica: não memorize Regex inteiras.

Memorize conceitos:

^     começo
$     final
\d    dígito
\w    caractere de palavra
\s    espaço
+     uma ou mais vezes
*     zero ou mais vezes
?     opcional
[]    classe
()    grupo
|     ou
{}    quantidade

Segunda dica: construa aos poucos.

Terceira dica: teste em uma amostra pequena.

Quarta dica: mantenha exemplos válidos e inválidos.

Quinta dica: dê nome ao padrão no código.

Em vez de:

if re.match(r"^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$", texto):

prefira:

PADRAO_EMAIL_SIMPLES = r"^[\w.-]+@[\w.-]+\.[A-Za-z]{2,}$"

if re.match(PADRAO_EMAIL_SIMPLES, texto):

Sexta dica: documente limitações.

Exemplo:

Valida apenas o formato geral do e-mail.
Não implementa integralmente todas as regras da RFC.

Sétima dica: não confie em Regex como única barreira de segurança.

Regex pode ajudar a validar entrada, mas segurança exige escaping, parametrização, autorização, limites de tamanho e tratamento adequado de dados.


27. Easter egg da Frota Estelar

Imagine que o computador da USS Enterprise recebeu o seguinte log:

STARDATE=47634.44 | SHIP=NCC-1701-D | STATUS=WARP_CORE_WARNING
STARDATE=47634.45 | SHIP=NCC-1701-D | STATUS=STABLE
STARDATE=47634.46 | SHIP=NCC-74656 | STATUS=TRANSWARP_DETECTED

Queremos extrair apenas os registros da Enterprise-D:

SHIP=NCC-1701-D

Queremos extrair todas as naves:

SHIP=NCC-\d+(?:-[A-Z])?

Isso poderia encontrar:

SHIP=NCC-1701-D
SHIP=NCC-74656

Queremos extrair todas as datas estelares:

STARDATE=\d+\.\d+

E agora o Easter egg:

procure no log uma nave cujo registro contenha:

NCC-1701

Ao encontrar esse padrão, o sistema poderia responder:

Tea, Earl Grey, hot.

Sim, Padawan: até uma Regex pode conter espírito de tripulação.


28. Curiosidades sobre Regex

Expressões regulares possuem raízes na matemática e na ciência da computação teórica.

O conceito está relacionado a linguagens formais e autômatos finitos.

Posteriormente, Regex tornou-se popular em ferramentas de processamento de texto, especialmente no ambiente Unix e em linguagens como Perl.

Perl teve enorme influência na sintaxe moderna das expressões regulares.

Por isso, muitos mecanismos são chamados de “compatíveis com Perl” ou PCRE, de Perl Compatible Regular Expressions.

Mas nem toda implementação é idêntica.

Uma expressão que funciona em Python pode precisar de ajustes em:

  • Java;

  • JavaScript;

  • PowerShell;

  • grep;

  • sed;

  • banco de dados;

  • editor de texto.

Alguns mecanismos suportam:

  • lookahead;

  • lookbehind;

  • grupos nomeados;

  • Unicode avançado;

  • modo multilinha;

  • modo case-insensitive;

  • quantificadores não gulosos.

Outros possuem limitações.

Sempre confirme qual mecanismo Regex está sendo utilizado.


29. Regex e qualidade de dados

Regex não serve apenas para encontrar texto.

Ela participa diretamente da qualidade dos dados.

Podemos usar Regex para:

  • detectar campos fora do padrão;

  • separar registros válidos e inválidos;

  • normalizar entradas;

  • extrair partes relevantes;

  • mascarar informações;

  • remover ruído;

  • identificar anomalias;

  • construir regras de qualidade;

  • preparar dados para análise.

Imagine uma coluna com CPFs:

123.456.789-00
12345678900
123 456 789 00
CPF: 123.456.789-00

Primeiro, poderíamos remover tudo que não seja dígito:

\D

Substituindo por vazio.

Resultado:

12345678900
12345678900
12345678900
12345678900

Depois, validamos se existem onze dígitos:

^\d{11}$

Isso ainda não valida os dígitos verificadores do CPF.

Essa validação exige algoritmo específico.

Mais uma vez:

  • Regex normaliza e verifica a forma;

  • a lógica de negócio verifica o significado.


30. Um plano de aprendizado em sete missões

Missão 1 — Aprender os metacaracteres

Pratique:

.
*
+
?
^
$
[]
()
{}
|

Missão 2 — Aprender as classes

\d
\w
\s
\D
\W
\S

Missão 3 — Validar campos simples

Crie expressões para:

  • matrícula;

  • CEP;

  • data;

  • horário;

  • código de produto.

Missão 4 — Extrair informações

Use Regex para extrair:

  • e-mails;

  • URLs;

  • IPs;

  • números;

  • textos entre parênteses.

Missão 5 — Fazer substituições

Experimente:

  • reduzir espaços;

  • remover caracteres;

  • reorganizar datas;

  • limpar máscaras.

Missão 6 — Integrar com uma linguagem

Escolha:

  • Python;

  • PowerShell;

  • JavaScript;

  • Java;

  • REXX com apoio de ferramentas externas;

  • Bash no USS.

Missão 7 — Aplicar em um problema real

Pegue uma cópia de um arquivo bagunçado e execute um pequeno processo:

entrada
→ identificação
→ normalização
→ validação
→ rejeição
→ saída limpa

Esse fluxo transforma conhecimento em habilidade.


Conclusão — Regex não é magia; é reconhecimento de padrões

Quando olhamos pela primeira vez para:

^(?:\+55\s?)?(?:\(?\d{2}\)?\s?)?\d{4,5}[-\s]?\d{4}$

é natural sentir que estamos diante de uma linguagem extraterrestre.

Mas não estamos.

A expressão é formada por pequenas decisões:

  • começo da linha;

  • código do país opcional;

  • espaço opcional;

  • DDD opcional;

  • parênteses opcionais;

  • quatro ou cinco dígitos;

  • separador opcional;

  • quatro dígitos finais;

  • fim da linha.

Cada símbolo possui função.

Cada grupo representa uma regra.

A Regex só parece complicada quando tentamos enxergá-la inteira de uma vez.

O segredo é desmontá-la.

É exatamente como analisar um programa COBOL antigo com vinte mil linhas.

Você não compreende tudo olhando o fonte inteiro.

Você identifica:

  • arquivos;

  • layouts;

  • campos;

  • parágrafos;

  • chamadas;

  • condições;

  • regras;

  • pontos de entrada;

  • saídas.

Regex segue o mesmo princípio.

Divida.

Nomeie.

Teste.

Documente.

Evolua.

Não tente decorar todas as expressões possíveis. Nem Spock faria isso.

Aprenda os componentes fundamentais e mantenha um pequeno arsenal de padrões úteis.

O verdadeiro poder não está em possuir uma lista com quinze Regex.

Está em compreender como adaptá-las.

Quando chegar o arquivo com quarenta mil telefones inconsistentes, datas em cinco formatos e clientes cadastrados por sistemas de épocas diferentes, você não verá mais caos.

Você verá padrões.

E quando o restante da equipe perguntar como você conseguiu limpar o arquivo em minutos, ajuste o comunicador, olhe para a tela verde do terminal e responda com serenidade:

“Não foi magia. Foi lógica aplicada ao texto.”

Missão cumprida, tripulante.

O arquivo está limpo.

Os dados foram validados.

A Enterprise pode voltar à velocidade de dobra.


Vagner Renato Bellacosa, IBM Champion e especialista em IBM Mainframe
IBM Z17 SYSTEM ONLINE
Sobre o autor

Vagner Renato Bellacosa

IBM Champion 2026 • Especialista em IBM Mainframe

Vagner Renato Bellacosa trabalha com IBM Mainframe desde 1988 , é IBM Champion e especialista em COBOL, CICS, Db2, z/OS e IBM Z. Compartilha experiências profissionais, conhecimento técnico, história da computação e práticas do universo mainframe para aproximar novas gerações das tecnologias que sustentam empresas, bancos e governos ao redor do mundo.

IBM Champion IBM Z COBOL CICS Db2 z/OS Mainframe desde 1988
GitHub LinkedIn
Inicializando conteúdo...