Entrar ou criar conta

Laboratório: Pipeline ETL automatizado de BI com Apache Airflow, PostgreSQL e Pandas

Você vai implementar um pipeline de ETL automatizado com Apache Airflow, extraindo dados de um banco PostgreSQL, transformando com Pandas e carregando em outro banco. Tempo estimado: 2 a 3 horas.

Orquestração de DataOps para BI com Apache Airflow
Ligado ao treinamento Orquestração de DataOps para BI com Apache Airflow

Roteiro para estudo em ambiente de laboratório ou de teste. Execute apenas em equipamentos, redes e contas que você tenha autorização para usar, com backup e homologação próprios. Comandos podem causar indisponibilidade ou perda de dados. Software e marcas citados pertencem aos seus titulares. Termos de Uso.

ULC-LAB-BI-0003 · Status de validaçãoNão validado pela Upnetix: roteiro derivado da documentação oficial, para você executar e validar
Duração estimada
120 min
Passos
11
Validações
4
Versões da documentação consultada
Apache Airflow 2.8.1 · PostgreSQL 16 · Python 3.10 · Pandas 2.2.2
Objetivo

Demonstrar, de ponta a ponta, a orquestração de um fluxo ETL típico de BI usando apenas ferramentas de código aberto. O laboratório cobre desde a instalação do Airflow até a automação de tarefas reais, simulando um cenário corporativo de integração entre fontes de dados e BI, em ambiente isolado e reproduzível.

Topologia

Três componentes principais: 1) Apache Airflow (192.168.56.10) orquestra o pipeline; 2) Banco PostgreSQL de origem (192.168.56.11) fornece dados brutos; 3) Banco PostgreSQL de destino (192.168.56.12) recebe os dados tratados. O Airflow conecta-se a ambos os bancos via rede privada.

      +--------------------+
      |   Apache Airflow  |
      | 192.168.56.10     |
      +--------+----------+
               |
    +----------+----------+
    |                     |
+---+---+           +-----+---+
| Origem|           | Destino |
|Postgre|           |Postgre  |
|.11    |           |.12      |
+-------+           +---------+

Equipamentos e software

ItemRequisito, licença ou versão
VM ou notebook para Airflow2 vCPU, 4GB RAM, 10GB disco, Ubuntu 22.04+
VM para PostgreSQL origem1 vCPU, 1GB RAM, 5GB disco, Ubuntu 22.04+
VM para PostgreSQL destino1 vCPU, 1GB RAM, 5GB disco, Ubuntu 22.04+
Apache AirflowApache 2.0 · 2.8.1
PostgreSQLPostgreSQL License · 16
PythonPSF License · 3.10
PandasBSD · 2.2.2

Roteiro

  1. Preparar as VMs e rede

    Crie três VMs (ou containers) em uma rede privada (ex: 192.168.56.0/24). Garanta comunicação entre elas.

    O que você deve ver: Ping entre as VMs funciona; acesso SSH disponível.

  2. Instalar PostgreSQL nas VMs de origem e destino

    Instale e configure o PostgreSQL em ambas as VMs. Defina senhas e permita conexões pela rede privada.

    sudo apt update && sudo apt install postgresql
    sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
    # Edite /etc/postgresql/16/main/pg_hba.conf e /etc/postgresql/16/main/postgresql.conf conforme a documentação.

    O que você deve ver: Serviço PostgreSQL ativo em ambas as VMs, aceitando conexões remotas.

  3. Criar bancos e tabelas de teste

    Crie um banco 'bi_origem' na origem e 'bi_destino' no destino. Crie tabelas simples para simular dados brutos e tratados.

    sudo -u postgres createdb bi_origem
    sudo -u postgres createdb bi_destino
    # Na origem:
    sudo -u postgres psql -d bi_origem -c "CREATE TABLE vendas (id serial PRIMARY KEY, produto text, valor numeric, data_venda date);"
    # No destino:
    sudo -u postgres psql -d bi_destino -c "CREATE TABLE vendas_tratadas (id serial PRIMARY KEY, produto text, valor numeric, data_venda date, valor_com_imposto numeric);"

    O que você deve ver: Tabelas criadas em ambos os bancos.

  4. Popular dados de teste na origem

    Insira alguns registros fictícios na tabela de origem para simular dados reais.

    sudo -u postgres psql -d bi_origem -c "INSERT INTO vendas (produto, valor, data_venda) VALUES ('Fibra 100M', 100, '2024-06-01'), ('Fibra 200M', 180, '2024-06-02');"

    O que você deve ver: Dados disponíveis na tabela vendas da origem.

  5. Instalar Apache Airflow na VM dedicada

    Instale o Apache Airflow com suporte a PostgreSQL e Pandas. Use ambiente virtual Python para isolar dependências.

    sudo apt install python3-venv
    python3 -m venv airflow_venv
    source airflow_venv/bin/activate
    pip install "apache-airflow[postgres,pandas]==2.8.1" --constraint "https://raw.githubusercontent.com/apache/airflow/constraints-2.8.1/constraints-3.10.txt"

    O que você deve ver: Airflow e dependências instalados sem erros.

  6. Inicializar e configurar o Airflow

    Inicialize o banco de dados do Airflow e crie um usuário admin. Configure o Airflow para rodar localmente.

    export AIRFLOW_HOME=~/airflow
    airflow db init
    airflow users create --username admin --password admin --firstname Admin --lastname User --role Admin --email admin@lab.local

    O que você deve ver: Airflow inicializado e usuário admin criado.

  7. Configurar conexões do Airflow com os bancos

    Adicione conexões no Airflow para os dois bancos PostgreSQL usando a interface web ou CLI.

    airflow connections add 'pg_origem' --conn-uri 'postgresql+psycopg2://postgres:postgres@192.168.56.11:5432/bi_origem'
    airflow connections add 'pg_destino' --conn-uri 'postgresql+psycopg2://postgres:postgres@192.168.56.12:5432/bi_destino'

    O que você deve ver: Conexões pg_origem e pg_destino criadas no Airflow.

  8. Criar DAG ETL no Airflow

    Implemente um DAG que: 1) extrai dados do banco origem, 2) transforma com Pandas (adiciona coluna de imposto), 3) carrega no banco destino.

    mkdir -p ~/airflow/dags
    touch ~/airflow/dags/etl_bi.py
    # Exemplo de DAG:
    # Consulte https://airflow.apache.org/docs/apache-airflow/stable/howto/operator/python.html para detalhes.
    # Veja trecho abaixo:
    
    from airflow import DAG
    from airflow.providers.postgres.hooks.postgres import PostgresHook
    from airflow.operators.python import PythonOperator
    from datetime import datetime
    import pandas as pd
    
    def extrair(**context):
        hook = PostgresHook(postgres_conn_id='pg_origem')
        df = hook.get_pandas_df('SELECT * FROM vendas;')
        df.to_csv('/tmp/vendas.csv', index=False)
    
    def transformar(**context):
        df = pd.read_csv('/tmp/vendas.csv')
        df['valor_com_imposto'] = df['valor'] * 1.1
        df.to_csv('/tmp/vendas_tratadas.csv', index=False)
    
    def carregar(**context):
        hook = PostgresHook(postgres_conn_id='pg_destino')
        df = pd.read_csv('/tmp/vendas_tratadas.csv')
        for _, row in df.iterrows():
            hook.run(
                "INSERT INTO vendas_tratadas (produto, valor, data_venda, valor_com_imposto) VALUES (%s, %s, %s, %s)",
                parameters=(row['produto'], row['valor'], row['data_venda'], row['valor_com_imposto'])
            )
    
    default_args = {'start_date': datetime(2024, 6, 1)}
    with DAG('etl_bi', schedule_interval=None, default_args=default_args, catchup=False) as dag:
        t1 = PythonOperator(task_id='extrair', python_callable=extrair)
        t2 = PythonOperator(task_id='transformar', python_callable=transformar)
        t3 = PythonOperator(task_id='carregar', python_callable=carregar)
        t1 >> t2 >> t3

    O que você deve ver: Arquivo etl_bi.py criado em ~/airflow/dags.

  9. Iniciar o Airflow Scheduler e Webserver

    Suba o scheduler e o webserver do Airflow para monitorar e executar o DAG.

    airflow scheduler &
    airflow webserver --port 8080 &

    O que você deve ver: Airflow acessível em http://localhost:8080.

  10. Executar o DAG manualmente

    No painel do Airflow, ative e execute o DAG etl_bi. Observe o status das tarefas.

    O que você deve ver: Execução do DAG com três tarefas: extrair, transformar, carregar.

  11. Verificar dados no banco de destino

    Confirme que os dados tratados chegaram corretamente ao banco de destino.

    sudo -u postgres psql -d bi_destino -c "SELECT * FROM vendas_tratadas;"

    O que você deve ver: Registros com coluna valor_com_imposto presentes na tabela vendas_tratadas.

Como saber que funcionou

TesteComandoCritério
Conexão do Airflow com ambos os bancosairflow connections get pg_origemDados de conexão exibidos corretamente
Execução do DAG sem falhasTodas as tarefas do DAG aparecem como 'success' no Airflow
Dados transformados corretamentesudo -u postgres psql -d bi_destino -c "SELECT valor_com_imposto FROM vendas_tratadas;"Valores correspondem a valor * 1.1
Webserver acessívelcurl http://localhost:8080Página HTML do Airflow retornada

Troubleshooting

SintomaCausa provávelCorreção
Erro de conexão ao banco de dadosConfiguração incorreta de host, porta ou senhaRevise o comando de conexão e permissões no pg_hba.conf
DAG não aparece no painelArquivo DAG com erro de sintaxe ou fora da pasta corretaCorrija o código e salve em ~/airflow/dags
Tarefa de transformação falhaPandas não instalado ou erro de leitura de arquivoVerifique instalação do Pandas e caminhos de arquivos
Webserver não iniciaPorta 8080 ocupada ou variável AIRFLOW_HOME incorretaLibere a porta ou ajuste a variável e tente novamente

Segurança e hardening

  • Nunca use senhas padrão em ambientes de produção
  • Restrinja o acesso às portas do PostgreSQL apenas à rede privada
  • Evite salvar dados sensíveis em arquivos temporários sem criptografia
  • Configure roles e permissões mínimas necessárias no PostgreSQL
  • Desative usuários e conexões não utilizados após o laboratório

Checklist final

Referências

  1. Documentação oficial do Apache Airflow · Apache Software Foundation (Airflow) (airflow.apache.org)
  2. Documentação do Docker (opcional para ambiente) · Docker, Inc. (docs.docker.com)
Verificação editorial
Publicado
09/09/2026
Última revisão
09/09/2026
Versão do conteúdo
1.0
Referências
2 oficiais
Revisão técnica
redação e revisão por IA, URLs conferidas na publicação
Status
Atual
Encontrou um erro? Escreva para comercial@upnetix.com.br com o endereço da página. A revisão semestral por IA nunca altera comandos ou configurações sem passar pela fila de revisão.