10 minutos com tap-ixc¶
Um passeio prático: do zero até dados sincronizados, incremental e agendado. Ao final você terá rodado uma carga real e entendido o ciclo.
Pré-requisitos
Python 3.12+, um PostgreSQL acessível e credenciais de uma instância IXC Soft
(base_url + token no formato usuario:token).
1. Instalar¶
Isso cria o comando tap-ixc. Confira:
2. Configurar seu primeiro cliente¶
A configuração vive em config/clients.yml. Crie a partir do exemplo:
Edite para o seu provedor — começamos com um endpoint (clientes):
acme:
system: ixc
schema_name: public
postgres_dsn: "postgresql://postgres:senha@localhost:5432/acme"
duckdb_path: "/tmp/etl-staging/acme.duckdb"
api:
base_url: "https://acme.ixcsoft.com.br/webservice/v1"
token: "10:seu_token_aqui"
endpoints:
- name: clientes
api_endpoint: cliente
strategy: full
3. Preparar o monitoramento¶
A lib registra cada run num schema PostgreSQL dedicado. Aponte e crie as tabelas:
export ETL_MONITOR_DSN="postgresql://postgres:senha@localhost:5432/acme"
psql "$ETL_MONITOR_DSN" -f docs/schema.sql
4. Validar antes de rodar¶
Se algo faltar, a mensagem diz exatamente o quê (token, env var, schema...).
5. Primeira carga¶
Veja os dados:
E o histórico do run:
6. Ligar o modo incremental¶
Carregar 12 mil clientes todo dia é desperdício. Mude para delta — só o que mudou:
- name: clientes
api_endpoint: cliente
strategy: delta # incremental por ultima_atualizacao
pk_column: id
O primeiro delta ainda exige um backfill — você já fez no passo 5 com full.
A partir de agora, cada run baixa só os registros alterados desde o último:
A lib guarda o cursor (ultima_atualizacao) no checkpoint e avança só após o
carregamento completo. Pular um dia não perde dados. Um dia sem mudanças é um
no-op de sucesso. (Detalhes em Incremental.)
7. Adicionar mais endpoints¶
Acrescente contratos e titulos ao clients.yml:
- name: contratos
api_endpoint: cliente_contrato
strategy: delta
pk_column: id
- name: titulos
api_endpoint: fn_areceber
strategy: delta
pk_column: id
8. Agendar¶
Cada run é idempotente e o load é atômico — pode agendar sem medo. No cron:
0 8 * * * cd /opt/tap-ixc && ETL_MONITOR_DSN="$ETL_MONITOR_DSN" tap-ixc run acme >> /var/log/tap-ixc.log 2>&1
tap-ixc run sai com código != 0 se algum stream falhar — o agendador detecta.
Para Airflow, veja Deploy.
Pronto¶
Você instalou, configurou, validou, carregou, ligou o incremental e agendou. Próximos caminhos:
- Excluir campos sensíveis (ex:
senha) → Configuração:fields - Validar linhas e isolar lixo → Incremental e validação
- Como funciona por dentro → Arquitetura
- Adicionar um endpoint novo via código → Streams