antt-fetcher¶
O antt-fetcher coleta os dados abertos da ANTT (Agência Nacional de Transportes Terrestres) publicados no portal CKAN e no gov.br, e converte os CSVs para o lake Hive em Parquet.
| Fonte | ANTT, portal de dados abertos (CKAN) e uma planilha XLSX no gov.br |
| Formato | CSV (preferido) e JSON; XLSX no grupo govbr |
| Organização | 9 grupos, 106 pacotes do CKAN mais o XLSX do gov.br, e 3 macro-aliases |
| Escopo do pacote | download e conversão para Parquet. A carga em banco não faz parte dele |
Pacote ainda não publicado
O pacote está na branch feat/r1 e ainda não tem release no índice. Os comandos abaixo valem a partir da primeira publicação.
Instalação¶
# Via CLI unificada (recomendado)
quantilica install antt --extra analysis
# Ou como biblioteca no seu projeto
uv add 'antt-fetcher[analysis]' --index https://index.quantilica.com/simple/
O extra analysis é necessário para a conversão ao lake.
Requisitos: Python 3.12+
Primeiro dado¶
quantilica antt list
quantilica antt sync -o ./data/antt
Comandos¶
| Comando | O que faz |
|---|---|
quantilica antt list |
Lista os arquivos dos pacotes R1 |
quantilica antt catalogo [grupo] [--tier] |
Catálogo completo (R1 e listados), sem rede |
quantilica antt discover [--json] [--fail-on-change] |
Aponta pacotes novos, removidos na fonte (o bruto é mantido) e crescidos. Resposta vazia ou do WAF vira erro, nunca "tudo removido" |
quantilica antt check |
Compara o disco com o remoto, sem baixar |
quantilica antt sync |
Baixa os grupos pedidos. Padrão de saída: /data/antt |
quantilica antt convert <entrada> <lake> |
Converte o acervo bruto para o lake Hive |
Conjuntos: R1 e listados¶
O CKAN da ANTT publicava 106 pacotes em 2026-11-03; o catálogo cobre os 106 mais o XLSX do gov.br.
| Grupo | Pacotes | R1 (baixa) | Listado |
|---|---|---|---|
| rodovias | 53 | 11 | 42 |
| cargas | 10 | 3 | 7 |
| passageiros | 22 | 14 | 8 |
| ferrovias | 6 | 2 | 4 |
| fiscalizacao | 8 | 5 | 3 |
| ouvidoria | 2 | 0 | 2 |
| tecnologia | 2 | 0 | 2 |
| visualizacoes | 3 | 0 | 3 |
| govbr | 1 | 1 | 0 |
list e sync operam só no tier R1: 35 pacotes do CKAN mais o XLSX do gov.br. Os demais estão listados. Quatro pacotes não têm CSV nem JSON (só PDF, KMZ ou painel) e nunca baixam. Macro-aliases: infraestrutura, transporte-rodoviario e gestao.
O grupo govbr traz a produção ferroviária origem-destino (XLSX de cerca de 9 MB). O nome do arquivo muda a cada mês, então a URL é resolvida pela página; o gov.br recusa HEAD (403), mas aceita GET com Range.
Particionamento no lake¶
O lake converte 5 conjuntos (volume-trafego-praca-pedagio, acidentes-rodovias, rntrc, monitriip-servico-regular-paradas e relatorio-acompanhamento-acidentes-ferroviarios-raaf), particionados por ano. O ano vem de cada linha (coluna de data do conjunto), então um CSV multi-ano gera uma partição por ano. O rntrc (retrato mensal) usa o período declarado no nome do arquivo. Linha sem ano válido vai para ano=__HIVE_DEFAULT_PARTITION__, com aviso. Os demais pacotes R1 ficam como bruto, sem conversão.
Cada membro de ZIP é uma origem própria (composite_file_key), com leitura em streaming.
Política de frescor¶
F2 (HEAD_FALLBACK_GET): HEAD com ETag/Last-Modified/Content-Length, com fallback para GET com Range: bytes=0-0 quando o servidor devolve 403/405 ou não envia cabeçalhos.
Limitações conhecidas¶
- O portal fica atrás de um WAF (F5). Respostas "Request Rejected" são tratadas como falha transitória, nunca como arquivo.
- O lake converte só os 5 conjuntos originais; o restante do R1 fica como bruto.
- Pacote removido do CKAN não derruba mais o grupo inteiro no
list.
Reconversão necessária¶
Reconverta com --force qualquer conjunto já convertido por versão anterior: o ano da partição era o da primeira linha do arquivo (com 2024 como fallback silencioso) e os ZIPs com vários membros só entregavam o primeiro.