Comércio Exterior (Comex)¶
Dados de importação e exportação brasileira extraídos do Siscomex (Sistema Integrado de Comércio Exterior).
comex-fetcher é um agente de extração resiliente de rede — projetado especificamente para lidar com a infraestrutura governamental legada, superando instabilidades através de downloads idempotentes e eficiência via chunk streaming.
Pegadinhas da fonte oficial
- Arquivos em escala de GB. Cada arquivo anual de transações (NCM 4-dígitos) atinge facilmente múltiplos gigabytes. Utilize
polars.scan_csv(avaliação lazy) ou os converta para.parquet; um meropd.read_csvcausará Out Of Memory (OOM). - SSL frequentemente quebrado. O servidor do Siscomex e do MDIC possui a fama de deixar a cadeia de certificados incompleta em curtas janelas de tempo. A CLI possui um fallback não-verificado (unverified context) configurável para não quebrar pipelines noturnos.
- Schema NCM vs NBM. A classificação NCM cobre as transações de 1997 em diante; a NBM cobre o buraco negro de 1989 a 1996 e possui colunas diferentes. Não os concatene de olhos fechados.
- A matrix dimensional. Os arquivos principais trazem apenas IDs numéricos (País=23, UF=1). O real valor analítico só surge quando você faz JOIN com as 20+ tabelas auxiliares (países, municípios, vias de transporte) que a CLI baixa automaticamente.
- Idempotência é temporal. Como não há API moderna fornecendo Hashes, o fetcher usa requisições
HEADpara validar o cabeçalhoLast-Modifieddo servidor FTP/HTTP. Se o MDIC corrigir uma linha do passado, ele baixará novamente o arquivo modificado de forma indetectável para você.
Instalação¶
pip install comex-fetcher
Requisitos: Python 3.12+
CLI Oficial (Ambiente Unificado)¶
A porta de entrada primária para baixar transações internacionais é o executável quantilica. A CLI orquestra automaticamente a validação temporal, os retries e o streaming:
# Baixar exportações e importações completas para 2023 (+ tabelas auxiliares)
quantilica comex sync 2023 -o ./data
# Baixar apenas as importações (de 2018 até 2023), no nível granular de municípios
quantilica comex sync 2018:2023 -imp -mun -o ./data
# Longa duração (multi-GB): clonar a base completa (todos os anos) + tabelas de códigos
quantilica comex sync -o ./data
# Apenas atualizar as tabelas auxiliares
quantilica comex sync --tables-only -o ./data
Datasets e Tabelas (Macro-Grupos)¶
Transações Comerciais Fato¶
exp/imp: Exportações/Importações normais (1997+, nível UF)exp-mun/imp-mun: Exportações/Importações mais granulares, rastreando o município emissor/receptor.exp-nbm/imp-nbm: Legado histórico (1989-1996) sob a classificação NBM.
Tabelas Auxiliares (Dimensões)¶
Ao sincronizar o Comex, a ferramenta puxa silenciosamente dicionários indispensáveis, salvos em auxiliary-tables/:
- ncm (Nomenclatura Comum do Mercosul), sh (Sistema Harmonizado)
- pais, pais-bloco (Mercosul, União Europeia, etc)
- uf-mun (Municípios), via (Marítima, Aérea, etc), urf (Unidade da Receita Federal)
Cookbook Analítico: Agregações em GBs com Polars¶
O volume de arquivos CSV gerados pelo SISCOMEX facilmente esgota a memória RAM, especialmente quando você busca granularidade municipal (-mun).
Abaixo demonstramos a maneira idiomática de cruzar os dados faturados (gigantescos) com a tabela de códigos NCM (pequena) executando o cálculo inteiramente em streaming:
import polars as pl
from pathlib import Path
# 1. Carrega as tabelas pequenas de metadados em memória (Eager)
df_ncm = pl.read_csv(
"data/secex-comex/auxiliary-tables/ncm.csv",
separator=";",
encoding="latin-1"
)
# 2. Registra todos os anos de exportação no motor Lazy
# (O Polars não lê os GBs agora, apenas examina o schema)
df_export = pl.scan_csv(
"data/secex-comex/exp-mun/*.csv",
separator=";",
encoding="latin-1"
)
# 3. Descobrir os 5 produtos que o Brasil mais faturou em Dólar na década
top_commodities = (
df_export
# Faz o JOIN com os nomes legíveis antes mesmo de coletar!
.join(df_ncm.lazy(), left_on="CO_NCM", right_on="CO_NCM", how="left")
# Agrega o valor total faturado (FOB) em Dólar
.group_by("NO_NCM_POR")
.agg(pl.col("VL_FOB").sum().alias("Total_Dolar"))
.sort("Total_Dolar", descending=True)
.head(5)
.collect() # <-- Aqui o motor lê tudo paralelamente otimizando o I/O
)
print(top_commodities)
Resiliência de Rede Oculta¶
Se a sua conexão cair em 95% do download de um arquivo de 2 GB, o comex-fetcher não perde o trabalho. Ele baixa nativamente todos os chunks para extensões .tmp. Somente após o checksum e sucesso a transferência é efetivada, garantindo escritas 100% atômicas no seu datalake.
Uso sem Ambiente Unificado (Isolado)¶
Se necessário num container mínimo:
comex-fetcher sync 2023 -exp -o /data
comex-fetcher list
Saiba Mais¶
- Macroeconomia IBGE — Dados de PIB e economia
- Arquitetura do Ecossistema — Design do sistema