Data Lake
On-PremiseOn-Premise
Data Lake
Data Lake
na AzureData Lake
on Azure
Data Lake
na OCIData Lake
on OCI
Arquitetura moderna de dados on-premise baseada em ferramentas 100% open source: do banco Oracle transacional até dashboards interativos em tempo real, passando por Airflow, Spark, MinIO e Apache Pinot.Modern on-premise data architecture built on 100% open source tooling: from Oracle transactional data to real-time interactive dashboards, via Airflow, Spark, MinIO, and Apache Pinot. Exatamente o mesmo stack open source, agora sobre a Azure: Airflow, Spark, MinIO, Pinot e Superset rodando em AKS. Zero licenças, zero reescrita e nenhum lock-in — o dia em que quiser sair, o mesmo Helm chart sobe em qualquer outra nuvem ou de volta no seu datacenter.The exact same open source stack, now on Azure: Airflow, Spark, MinIO, Pinot, and Superset running on AKS. Zero licenses, zero rewrite, and no lock-in — the day you want out, the same Helm chart runs on any other cloud or back in your own datacenter. Aqui a premissa se inverte: em vez de carregar o stack open source para a nuvem, aproveita-se o que a OCI já entrega pronto. O Oracle deixa de ser uma fonte externa e passa a viver ao lado do lake, e boa parte da operação sai das suas mãos — em troca de uma dependência bem maior de um fornecedor só.Here the premise inverts: instead of carrying the open source stack to the cloud, you lean on what OCI already provides. Oracle stops being an external source and comes to live next to the lake, and much of the operational burden leaves your hands — in exchange for a far deeper dependency on a single vendor.
Visão da
arquitetura
Architecture
overview
A arquitetura extrai dados do Oracle e os entrega até o analista consultando dados em milissegundos no Superset.The architecture extracts data from Oracle and delivers it all the way to analysts querying in milliseconds on Superset. A mesma arquitetura, agora sobre a Azure. O caminho do dado é idêntico — o que muda é onde os contêineres rodam.The same architecture, now on Azure. The data path is identical — what changes is where the containers run.
A stack The stack
Oracle como fonte, Airflow orquestrando cada passo, Spark transformando em escala, MinIO armazenando em três camadas, Pinot respondendo em menos de 100ms, Superset entregando ao analista. Do dado bruto ao dashboard, sem dependência de cloud pública.Oracle as source, Airflow orchestrating each step, Spark transforming at scale, MinIO storing across three layers, Pinot responding in under 100ms, Superset delivering to the analyst. From raw data to dashboard, with no public cloud dependency. Os mesmos seis componentes, as mesmas versões, os mesmos arquivos de configuração — empacotados em Helm charts e rodando em AKS. A Azure entra como infraestrutura (computação, disco, rede, identidade), nunca como parte do pipeline.The same six components, same versions, same config files — packaged as Helm charts and running on AKS. Azure comes in as infrastructure (compute, disk, network, identity), never as part of the pipeline itself. Dos seis componentes originais, quatro saem. Ficam o Object Storage — que fala API S3 e por isso continua neutro — e o modelo Medallion, que é desenho de dados, não ferramenta. O resto vira serviço gerenciado da Oracle.Of the six original components, four step aside. What stays: Object Storage — which speaks the S3 API and therefore remains neutral — and the Medallion model, which is data design rather than tooling. The rest becomes Oracle managed services.
Oracle Database
Banco de dados transacional existente. A extração é feita via JDBC com queries incrementais por updated_at, minimizando impacto em produção.
Existing transactional database. Extraction via JDBC with incremental queries by updated_at, minimizing production impact.
Oracle Database
Cenário A: migra para Autonomous Database ou Exadata Cloud, na mesma VCN do lake — a extração deixa de atravessar a WAN. Cenário B: permanece on-premise e a ingestão passa por FastConnect, igual à opção Azure.
Scenario A: moves to Autonomous Database or Exadata Cloud, in the same VCN as the lake — extraction no longer crosses the WAN. Scenario B: stays on-premise and ingestion goes over FastConnect, same as the Azure option.
OCI Data Integration
ETL gerenciado da Oracle, com editor visual em vez de DAGs em Python. Substitui Airflow e Spark de uma vez. Menos para operar — e nenhum pipeline que você possa levar embora.
Oracle's managed ETL, with a visual editor instead of Python DAGs. Replaces Airflow and Spark at once. Less to operate — and no pipeline you can take with you.
Apache Airflow
Coração do ETL. Define, agenda e monitora cada passo do pipeline como um DAG. Interface web para gestão, backfill e alertas.
The ETL's heart. Defines, schedules, and monitors each pipeline step as a DAG. Web UI for management, backfill, and alerts.
Apache Spark
Engine de transformações distribuídas. Executa dentro dos DAGs do Airflow para joins, deduplicação e aggregações em larga escala.
Distributed transformation engine. Runs inside Airflow DAGs for large-scale joins, deduplication, and aggregations.
MinIO
OCI Object Storage
Object storage S3-compatible on-premise. Armazena Bronze, Silver e Gold em Parquet. Também funciona como deep storage do Pinot.
On-premise S3-compatible object storage. Stores Bronze, Silver, and Gold in Parquet. Also serves as Pinot's deep storage.
O mesmo MinIO, agora em AKS sobre Azure Managed Disks (Premium SSD v2). Mantém a API S3 — é justamente ela que evita o lock-in: nenhum job conhece a Azure, todos falam S3.
The same MinIO, now on AKS over Azure Managed Disks (Premium SSD v2). It keeps the S3 API — which is precisely what avoids lock-in: no job knows about Azure, they all speak S3.
Aqui o MinIO simplesmente sai de cena: o Object Storage da OCI já fala API S3 nativa. Some o StatefulSet, os 120 TB de disco e a questão da AGPL — e mesmo assim este continua sendo o único componente portável da arquitetura.
Here MinIO simply leaves the picture: OCI Object Storage already speaks the native S3 API. The StatefulSet, the 120 TB of disk, and the AGPL question all disappear — and even so, this remains the only portable component in the architecture.
Autonomous Data Warehouse
Data warehouse gerenciado, com tuning e escala automáticos. Cobre bem BI e relatórios, mas é um motor de warehouse, não de OLAP em tempo real: para o padrão de sub-100ms com alta concorrência do Pinot, precisa ser medido antes de prometer.
Managed data warehouse with automatic tuning and scaling. It covers BI and reporting well, but it is a warehouse engine, not a real-time OLAP one: matching Pinot's sub-100ms, high-concurrency profile has to be measured before it is promised.
Apache Pinot
OLAP distribuído de ultra-baixa latência. Indexa segmentos da camada Gold e responde queries em menos de 100ms, mesmo com bilhões de linhas.
Ultra-low latency distributed OLAP. Indexes Gold layer segments and answers queries in under 100ms, even with billions of rows.
Oracle Analytics Cloud
BI gerenciado, integrado ao ADW e ao Identity Domains para SSO e segurança por linha. Maduro e completo — mas os dashboards passam a viver num formato proprietário, e migrar depois significa refazê-los.
Managed BI, integrated with ADW and Identity Domains for SSO and row-level security. Mature and complete — but dashboards now live in a proprietary format, and migrating later means rebuilding them.
Apache Superset
Plataforma de BI open source. Conecta-se nativamente ao Pinot via SQL. Dashboards interativos, exploração ad-hoc e alertas automáticos.
Open source BI platform. Connects natively to Pinot via SQL. Interactive dashboards, ad-hoc exploration, and automated alerts.
ETL com
Airflow
ETL with
Airflow
Cada pipeline é um DAG: um grafo de tarefas com dependências, retentativas e alertas configurados. Gestão completa via interface web. Each pipeline is a DAG: a task graph with dependencies, retries, and alerts configured. Full management via web UI.
Oracle → Bronze
- Conexão JDBC com pool gerenciado pelo Airflow
- JDBC connection with Airflow-managed pool
- Query incremental por coluna
updated_at - Incremental query by
updated_atcolumn - Full load semanal para tabelas sem timestamp
- Weekly full load for tables without timestamps
- Escrita em JSON.gz no bucket Bronze do MinIO
- Writes JSON.gz to MinIO Bronze bucket
- Metadados: volume, checksum, timestamp de extração
- Metadata: volume, checksum, extraction timestamp
Bronze → Silver → Gold
- Spark lê Bronze via API S3 do MinIO
- Spark reads Bronze via MinIO S3 API
- Silver: dedup, tipagem, limpeza de nulos
- Silver: dedup, type casting, null cleanup
- Particionamento por
ano/mês/dia - Partitioned by
year/month/day - Gold: joins entre domínios, KPIs de negócio
- Gold: cross-domain joins, business KPIs
- Saída em Parquet com compressão Snappy
- Output in Parquet with Snappy compression
Gold → Pinot
- Airflow chama REST API do Pinot Controller
- Airflow calls Pinot Controller REST API
- Job offline: lê Parquet direto do MinIO
- Offline job: reads Parquet directly from MinIO
- Pinot persiste segmentos no bucket
pinot-deep - Pinot persists segments in
pinot-deepbucket - Dados disponíveis para query em menos de 5 min
- Data available for querying in under 5 minutes
- StarTree Index gerado automaticamente
- StarTree Index generated automatically
ETL com
Data Integration
ETL with
Data Integration
Em vez de DAGs em Python versionados no Git, o pipeline é montado num editor visual gerenciado pela Oracle. É mais rápido de começar e bem mais difícil de versionar, revisar e migrar. Instead of Python DAGs versioned in Git, the pipeline is built in a visual editor managed by Oracle. Faster to start, and considerably harder to version, review, and migrate.
git diff de um pipeline, não há teste unitário de DAG, e recriar isso em outra nuvem significa refazer, não mover. Para times pequenos, costuma valer a pena; para times que já operam Airflow bem, raramente vale.
Airflow, Spark, the metadata PostgreSQL, Redis, and all the operational work that came with them disappear — probably the two heaviest weeks of the schedule. In exchange, transformation logic now lives inside Oracle's service: there is no git diff of a pipeline, no unit test of a DAG, and recreating it on another cloud means rebuilding, not moving. For small teams this usually pays off; for teams already running Airflow well, it rarely does.
Arquitetura
Medallion
Medallion
Architecture
O MinIO organiza os dados em três camadas, cada uma com propósito, formato e nível de qualidade específicos. Os dados nunca são sobrescritos: apenas promovidos. MinIO organizes data into three layers, each with a specific purpose, format, and quality level. Data is never overwritten: only promoted.
└─ oracle/
├─ clientes/
│ └─ 2026/05/01/
│ extract.json.gz
├─ pedidos/
└─ estoque/
└─ clientes/
└─ year=2026/
└─ month=05/
part-000.parquet
├─ vendas_diarias/
├─ clientes_ativos/
├─ estoque_critico/
└─ faturamento_mensal/
Os três
servidoresThe three
servers
Os três
node poolsThe three
node pools
Cada servidor tem uma responsabilidade única. O isolamento facilita escalonamento independente e aumenta resiliência do conjunto.Each server has a unique responsibility. Isolation enables independent scaling and increases overall resilience. A mesma separação de responsabilidades, agora como node pools dedicados num único cluster AKS. A diferença prática: cada pool escala sozinho, sob demanda, e você paga só pelo que está ligado.The same separation of concerns, now as dedicated node pools in a single AKS cluster. The practical difference: each pool scales on its own, on demand, and you pay only for what is running. Esta é a seção mais curta das três — e é exatamente esse o argumento. Não há servidor para dimensionar nem node pool para ajustar: os serviços são gerenciados e escalam sozinhos. O que sobra de infraestrutura própria é um cluster OKE pequeno, e mesmo ele é opcional.This is the shortest of the three versions of this section — and that is precisely the argument. There is no server to size and no node pool to tune: the services are managed and scale on their own. What remains of your own infrastructure is one small OKE cluster, and even that is optional.
32 cores / 64 threads
(expansível a 256 GB) (expandable to 256 GB)
(Spark shuffle) (Spark shuffle)
12 cores / 24 threads
(MinIO é I/O-bound) (MinIO is I/O-bound)
120 TB bruto · RAID-Z2
ZFS L2ARC
64 cores / 128 threads
(Pinot é memory-intensive) (Pinot is memory-intensive)
32 TB · acesso sub-mssub-ms access
8 vCPU / 32 GB
picos só na janela do ETL bursts only during the ETL window
(Spark shuffle)
(gerenciado · substitui o PG local) (managed · replaces local PG)
8 vCPU / 64 GB
erasure coding do MinIO MinIO erasure coding
(IOPS e throughput ajustáveis à parte) (IOPS and throughput tuned separately)
16 vCPU / 128 GB
acompanha a concorrência de queries follows query concurrency
acesso sub-ms · é o que sustenta o <100ms sub-ms access · this is what sustains the <100ms
(gerenciado · sem servidor) (managed · serverless)
Standard + Archive · API S3 Standard + Archive · S3 API
auto-tuning · auto-scaling auto-tuning · auto-scaling
dashboards · alertas · RLS dashboards · alerts · RLS
Portas & rede Ports & network
Acesso & rede Access & network
| ServiçoService | ServidorServer | PortaPort | AcessoAccess |
|---|---|---|---|
| Airflow UI | SRV-01 | 8080 | LAN internaInternal LAN |
| Spark UI | SRV-01 | 4040 | Equipe dadosData team |
| MinIO API | SRV-02 | 9000 | SRV-01 e SRV-03SRV-01 and SRV-03 |
| MinIO Console | SRV-02 | 9001 | AdminsAdmins |
| Pinot Controller | SRV-03 | 9000 | SRV-01 (Airflow)SRV-01 (Airflow) |
| Pinot Broker SQL | SRV-03 | 8099 | Superset + devsSuperset + devs |
| Apache Superset | SRV-03 | 443 (Nginx) | Todos usuários · HTTPSAll users · HTTPS |
| ZooKeeper | SRV-03 | 2181 | Interno SRV-03SRV-03 internal |
| ServiçoService | Endereço no clusterIn-cluster address | PortaPort | AcessoAccess |
|---|---|---|---|
| Airflow UI | airflow-web.etl | 8080 | App Gateway · Entra IDApp Gateway · Entra ID |
| Spark UI | spark-driver.etl | 4040 | Port-forward · equipe dadosPort-forward · data team |
| MinIO API | minio.storage | 9000 | Interno ao clusterCluster-internal |
| MinIO Console | minio-console.storage | 9001 | Admins · via App GatewayAdmins · via App Gateway |
| Pinot Controller | pinot-controller.analytics | 9000 | Airflow (pool-etl)Airflow (pool-etl) |
| Pinot Broker SQL | pinot-broker.analytics | 8099 | Superset + devsSuperset + devs |
| Apache Superset | superset.analytics | 443 (App Gateway)(App Gateway) | Todos usuários · HTTPS + SSOAll users · HTTPS + SSO |
| ZooKeeper | zookeeper.analytics | 2181 | Interno ao namespaceNamespace-internal |
| ServiçoService | TipoType | AcessoAccess |
|---|---|---|
| Object Storage | GerenciadoManaged | Endpoint S3 · private endpoint na VCNS3 endpoint · private endpoint in the VCN |
| Data Integration | GerenciadoManaged | Console OCI · Identity DomainsOCI Console · Identity Domains |
| Autonomous DW | GerenciadoManaged | SQL · private endpoint · mTLSSQL · private endpoint · mTLS |
| Analytics Cloud | GerenciadoManaged | HTTPS · SSO · todos usuáriosHTTPS · SSO · all users |
| Autonomous DB (cenário A)(scenario A) | GerenciadoManaged | Mesma VCN · sem WANSame VCN · no WAN |
| Oracle on-prem (cenário B)(scenario B) | SeuYours | FastConnect ou VPNFastConnect or VPN |
| OKE (opcional)(optional) | SeuYours | Subnet privadaPrivate subnet |
Roadmap de implantação
Deployment
roadmap
Infraestrutura na semana 3. ETL rodando e engenheiros com acesso ao MinIO na semana 7. Pinot com queries abaixo de 100ms na semana 10. Superset, monitoramento e handoff na semana 13.Infrastructure by week 3. ETL running and engineers with MinIO access by week 7. Pinot with sub-100ms queries by week 10. Superset, monitoring, and handoff by week 13. Cinco semanas a menos: não há compra, entrega nem racking de hardware. Infraestrutura na semana 1. ETL rodando na semana 4. Pinot abaixo de 100ms na semana 6. Superset, monitoramento e handoff na semana 8.Five weeks shorter: there is no hardware to buy, ship, or rack. Infrastructure by week 1. ETL running by week 4. Pinot under 100ms by week 6. Superset, monitoring, and handoff by week 8. O mais curto dos três, porque quase não há o que instalar. A maior parte do tempo vai para modelagem, migração do Oracle (cenário A) e reconstrução dos dashboards no OAC — não para infraestrutura.The shortest of the three, because there is almost nothing to install. Most of the time goes into modeling, migrating Oracle (scenario A), and rebuilding dashboards in OAC — not into infrastructure.
Infraestrutura base Base infrastructure
Provisionamento dos 3 servidores, instalação do SO, configuração de rede/VLAN, instalação do MinIO com ZFS. Definição de políticas IAM e criação dos buckets Bronze, Silver, Gold e pinot-deep.
Provision 3 servers, OS installation, network/VLAN config, MinIO with ZFS. Define IAM policies and create Bronze, Silver, Gold, and pinot-deep buckets.
Terraform provisiona VNet, subnets, cluster AKS e os 3 node pools. Deploy do MinIO via Helm sobre Managed Disks, criação dos buckets Bronze, Silver, Gold e pinot-deep, e das políticas IAM. Conectividade com o Oracle on-premise (VPN ou ExpressRoute) validada.
Terraform provisions the VNet, subnets, AKS cluster, and the 3 node pools. MinIO deployed via Helm over Managed Disks, Bronze/Silver/Gold/pinot-deep buckets and IAM policies created. Connectivity to the on-premise Oracle (VPN or ExpressRoute) validated.
Terraform provisiona a VCN, subnets e os buckets do Object Storage, com políticas IAM e Identity Domains. Decisão do cenário A ou B do Oracle e, no caso do B, FastConnect validado. Não há cluster nem storage para instalar.
Terraform provisions the VCN, subnets, and Object Storage buckets, with IAM policies and Identity Domains. Decision between Oracle scenario A or B and, for B, FastConnect validated. There is no cluster or storage to install.
ETL Oracle → MinIO Bronze/Silver ETL Oracle → MinIO Bronze/Silver
Instalação do Airflow e Spark, configuração das conexões Oracle, desenvolvimento dos DAGs de extração incremental, transformações Bronze→Silver. Validação de qualidade com Great Expectations.
Install Airflow and Spark, configure Oracle connections, develop incremental extraction DAGs, Bronze→Silver transformations. Quality validation with Great Expectations.
Migração do Oracle para Autonomous DB / Exadata, se for o cenário A — é a tarefa mais pesada desta fase e precisa de janela combinada. Pipelines de extração e transformação Bronze→Silver montados no Data Integration.
Oracle migration to Autonomous DB / Exadata, if scenario A — the heaviest task in this phase, requiring an agreed window. Extraction and Bronze→Silver transformation pipelines built in Data Integration.
Camada Gold + Apache Pinot Gold layer + Apache Pinot
Modelagem dos dados de negócio (Gold), transformações Spark, instalação do Pinot e ZooKeeper, criação dos schemas Pinot, pipeline de ingestão Gold→Pinot via REST API.
Business data modeling (Gold), Spark transformations, Pinot and ZooKeeper install, Pinot schema creation, Gold→Pinot ingestion pipeline via REST API.
Modelagem da camada Gold e carga no Autonomous Data Warehouse. É aqui que a latência precisa ser medida de verdade, com dados e concorrência reais — antes de prometer qualquer número ao usuário final.
Gold layer modeling and load into Autonomous Data Warehouse. This is where latency has to be genuinely measured, with real data and real concurrency — before promising any number to end users.
Superset + monitoramento + entrega Superset + monitoring + delivery
Instalação do Superset, conexão com Pinot, primeiros dashboards, configuração de usuários e row-level security, alertas, Prometheus + Grafana para monitoramento dos servidores. Handoff para a equipe.
Superset install, Pinot connection, first dashboards, users and row-level security setup, alerts, Prometheus + Grafana for server monitoring. Team handoff.
Instalação do Superset, conexão com Pinot, primeiros dashboards, SSO via Entra ID e row-level security, alertas. Monitoramento com Azure Monitor + Managed Grafana. Terraform e Helm charts entregues no seu repositório — é o que garante que a saída da Azure continue sendo uma opção real.
Superset install, Pinot connection, first dashboards, SSO via Entra ID and row-level security, alerts. Monitoring with Azure Monitor + Managed Grafana. Terraform and Helm charts handed over in your own repository — which is what keeps leaving Azure a real option.
Construção dos dashboards no Oracle Analytics Cloud — não é migração, é reconstrução, já que não há importação do Superset. SSO e segurança por linha via Identity Domains, alertas e handoff.
Building dashboards in Oracle Analytics Cloud — not a migration but a rebuild, since there is no Superset import path. SSO and row-level security via Identity Domains, alerts, and handoff.
<100ms das outras abas vem do Pinot, que é OLAP de tempo real. O ADW é um data warehouse: excelente para BI e relatório, mas o perfil de latência sob alta concorrência é outro. Trate esse número como a validar, não como herdado. (2) Os dashboards do Superset não migram para o OAC — são refeitos. (3) Concentrar banco, ETL, warehouse e BI num fornecedor único enfraquece sua posição na renovação. É uma decisão comercial legítima, mas deve ser tomada com os olhos abertos.
(1) The <100ms in the other tabs comes from Pinot, a real-time OLAP engine. ADW is a data warehouse: excellent for BI and reporting, but its latency profile under high concurrency is a different thing. Treat that number as to be validated, not inherited. (2) Superset dashboards do not migrate to OAC — they are rebuilt. (3) Concentrating database, ETL, warehouse, and BI in a single vendor weakens your position at renewal. That is a legitimate commercial decision, but it should be made with eyes open.