
#73286
Engenheiro(a) de Dados
nstech
Sobre a vaga
A nstech é a maior empresa de software para logística da América Latina e conecta empresas, soluções e talentos para transformar um dos setores mais essenciais da economia. Na Holding, atuamos de
forma estratégica, apoiando as empresas do grupo em temas corporativos, tecnologia, pessoas, cultura, governança e crescimento. Aqui, buscamos profissionais que queiram atuar com visão de negócio, colaboração e impacto, ajudando a sustentar a evolução do ecossistema nstech.
Sobre a Vaga
Você vai atuar na camada de processamento e orquestração da plataforma, construindo e evoluindo o framework Spark declarativo e a DagFactory que sustentam os pipelines de produção dos domínios da companhia (Veículo, Motorista, Carga, Viagem, Pessoa, Frete, Risco). Nossa plataforma é orientada a contratos: engenheiros de dados consumidores declaram pipelines em YAML (JobContract / dagfactory.yaml) e o framework renderiza DAGs do Airflow, submete jobs Spark ao Kubernetes e registra os outputs no Unity Catalog — sem boilerplate.
É um trabalho de engenharia de dados com profundidade real: você vai do design do schema de JobContract à evolução do delta-sink (liquid clustering, z-ordering, criptografia em descanso), passando por instrumentação OTEL/Prometheus, validação de contratos no PR e CI/CD da imagem Spark.
Responsabilidades e atribuições
Você vai desenvolver e evoluir o framework Spark interno em Python 3.13+ / PySpark 4.x — desde o design de contratos YAML (JobContract) até a abstração DataTask que renderiza o manifesto SparkApplication e o submete via SparkK8sOperator. Parte do trabalho é construir novas activities (sources, transforms, sinks); outra parte é evoluir a DagFactory, que abstrai infraestrutura comum — criação idempotente de catálogo/schema/tabela no Unity Catalog, triggers por schedule e por dataset-trigger (FQDN dos data assets), injeção de credenciais via Airflow Secret Manager e ownership padronizado.
No dia a dia, isso significa escrever novos transforms (DBTTransform, PythonTransform), evoluir o delta-sink com liquid clustering, z-ordering e particionamento configurável, implementar criptografia em descanso obrigatória com Spark encryption interoperável com Databricks, instrumentar jobs com logs estruturados (structlog/JSON), métricas Prometheus e traces OTEL, e manter o ciclo de deploy via GitHub Actions + GitOps (build da imagem Spark, distribuição de jobs ao pod via ConfigMap ou sync GitHub → WASB + mount PV). A governança é garantida por validador de JobContract no PR — schema YAML, existência do data contract, unicidade global de FQDN, coerência de materialização (tabela vs. view) — executável também localmente via justfile. A qualidade é garantida com testes em pytest, cobertura > 80% nos novos módulos e golden files diffados no CI a cada mudança no renderer.
Engenharia com IA
- Utilizar IA generativa (Claude, Copilot, Cursor) como ferramenta de produtividade diária — geração de código, revisão, documentação e debugging
- Operar dentro de frameworks com guardrails estabelecidos pelo time, como GSD, SpecKit e Superpowers: revisão crítica de outputs gerados por IA, rastreabilidade de decisões e validação antes de merge
- Contribuir com a evolução dos próprios workflows de desenvolvimento assistido por IA do time
Stack Técnica
|
Camada |
Tecnologias |
|
Linguagem / Runtime |
Python 3.13 / 3.14, Java 17 (Spark) |
|
Processamento |
PySpark 4.0.1, Delta Lake 4.0, structured streaming |
|
Orquestração |
Apache Airflow 3.2 (Celery+Kubernetes executor, KEDA, HA) |
|
Catálogo |
Unity Catalog (interop Databricks) |
|
Streaming |
Kafka (Confluent), Protobuf |
|
Contratos |
YAML, JSON Schema, ODCS (Open Data Contract Standard) |
|
Kubernetes |
AKS, Spark Operator v1beta2 (SparkApplication CRD) |
|
Qualidade |
Soda Core, pytest, golden files |
|
Observabilidade |
OpenTelemetry(OTLP), Prometheus, Grafana, Loki, structlog |
|
Infra |
Helm, Terraform/Terragrunt, ArgoCD, Azure Key Vault |
|
CI/CD |
GitHub Actions, GitOps (manifests repo) |
|
Dev local |
devenv (Nix), devspace, just, uv, Minikube |
Requisitos e qualificações
- Sólida experiência com Python para desenvolvimento de pipelines de dados em produção
- Conhecimento em PySpark — DataFrame API, Structured Streaming, otimizações de write/read, particionamento, z-ordering
- Experiência com Delta Lake — merge, upsert, vacuum, retention, autoOptimize
- Capacidade de trabalhar com Apache Airflow — TaskFlow, Datasets, operators customizados, executors (Celery/Kubernetes), plugins
- Capacidade de escrever código Python limpo, tipado, testável e modular
- Experiência com YAML / JSON Schema — design de contratos declarativos, validação programática, mensagens de erro acionáveis
- Conforto com Docker, pipelines de CI/CD e ambientes Kubernetes (manifestos, PV/PVC, ConfigMaps, Secrets)
Diferenciais
- Experiência com Spark Operator no Kubernetes (SparkApplication CRD, submissão e lifecycle)
- Conhecimento de OpenTelemetry e observabilidade de pipelines de dados (traces, métricas, logs estruturados)
- Experiência com Kafka — produtores, consumidores, Protobuf, offsets, controle de lag em streaming
- Familiaridade com Unity Catalog ou catálogos equivalentes (registro, lineage, ownership) e interoperabilidade Databricks
- Experiência com dbt-core — manifesto, execução programática contra Spark/Delta
- Conhecimento de Data Contracts (ODCS) e arquitetura medallion (Bronze/Silver/Gold, GDR/EDR/UDR)
- Experiência com GitOps (Argo CD, Flux ou similares) e gerenciamento de releases via manifests
- Contribuição ou manutenção de frameworks/SDKs internos compartilhados entre múltiplos times
- Familiaridade com devenv (Nix), devspace, just, uv ou ferramentas equivalentes de ambiente reproduzível
- Uso consciente de ferramentas de IA para desenvolvimento (Cursor, GitHub Copilot, Claude Code) com capacidade de avaliar criticamente os outputs
Como Trabalhamos
- Decisões são documentadas em RFCs e ADRs — qualquer pessoa pode propor mudanças arquiteturais
- Implementação tem Spec (spec-kit) antes de código — design revisado e aprovado pelo time antes da primeira linha
- Backlog em português: épicos, features, PBIs e tasks no padrão do repositório
- Declarative over imperative: se um pipeline exige Python escrito pelo consumidor do framework, o framework falhou
- Golden files no CI: mudanças no renderer aparecem como diff explícito em todos os pipelines impactados
- Valorizamos autonomia com contexto: você não precisa de aprovação para agir, mas precisa compartilhar o raciocínio
- IA é uma ferramenta de times sérios — usamos com disciplina, não com ingenuidade
- Trabalhamos em inglês na documentação técnica e em português no dia a dia
Benefícios
• Convênio médico com coparticipação
• Plano odontológico Amil Odonto
• Ticket refeição, sem custo para o colaborador
• Wellhub/Gympass
• Zenklub: duas consultas mensais sem custo
• Day off de aniversário
• Seguro de vida sem custo
• Auxílio funeral sem custo
Local:Remoto/Remoto
Formação:Ens. Médio Completo