Bronze → Silver¶
A etapa Bronze → Silver transforma a resposta bruta em dados analíticos prontos para consumo.
Etapas principais¶
- leitura dos arquivos JSONL da Bronze;
- parsing de cada envelope;
- expansão do state vector em campos estruturados;
- validação de coordenadas e identificadores;
- conversão de velocidade de m/s para km/h e de último contato para data/hora; as altitudes permanecem em metros;
- gravação em Parquet para a Silver;
- persistência de rejeitados em JSONL.
Comando¶
poetry run python -m air_traffic_beam.pipelines.bronze_to_silver \
--runner=DirectRunner \
--direct_num_workers=1
Registros válidos¶
A Silver guarda registros com schema tipado, incluindo:
icao24callsignorigin_countrylast_contactlast_contact_atlatitudelongitudevelocity_kmhon_ground
Registros rejeitados¶
Os registros inválidos são gerados em JSONL para permitir auditoria e investigação posterior.
Observabilidade¶
A etapa também grava um relatório em data/observability/ com:
- duração;
- número de registros lidos;
- registros válidos;
- rejeitados;
- taxa de erro;
- caminhos de saída.
Selecionar entradas e destinos¶
--input aceita um arquivo ou padrão de arquivos. O padrão deve ficar entre aspas para ser interpretado pelo pipeline. --silver-output e --rejected-output são prefixos, não nomes finais: o pipeline acrescenta UUID e sufixo de shard do Beam.
O padrão de entrada é data/bronze/aircraft_states/**/*.jsonl. Para transformar apenas a coleta atual, use run_all ou indique o arquivo Bronze em --input.
input_records conta envelopes, enquanto output_records conta aeronaves. Consulte Logs e relatórios antes de comparar essas métricas.