Harvester
ETL pipeline de alta performance
Extrae datos desde bases Oracle, PostgreSQL y otras fuentes, transforma a Parquet y deposita en Harkonnen Vault (S3). Pipeline batch nativo Rust con Tokio + Rayon. Compresión Parquet 9x vs CSV. Sin Spark, sin JVM, sin dependencias externas. Binario estático de ~12MB.
Características
- ✦100K rows/s con paralelismo Rayon
- ✦Compresión Parquet 9x vs CSV — 1GB de CSV → 110MB Parquet
- ✦Extracción directa desde Oracle, PostgreSQL, MySQL y más
- ✦Binario estático de 12MB — sin JVM, sin Spark, sin Python
- ✦Pipeline: Oracle → Arrow → Parquet → Harkonnen Vault (S3)
- ✦Jobs programables con cron expressions vía Sandworm
- ✦Retry automático con dead-letter queue
- ✦Idempotencia — re-ejecutar sin duplicados
- ✦Monitoreo de progreso en Eye of Ibad
Pipeline file
toml
# /etc/dune/pipelines/db-sync.toml
[source]
type = "oracle"
connection = "oracle://user:pass@hospital-db:1521/PROD"
query = "SELECT * FROM PACIENTES WHERE FECHA_MODIF > :last_run"
incremental = true
[[transforms]]
type = "arrow_columnar"
compression = "snappy"
[[transforms]]
type = "deduplicate"
key = "rut_paciente"
[destination]
type = "harkonnen-vault"
bucket = "data-lake"
prefix = "exports/"
format = "parquet"
compression = "zstd" # 9x vs CSV
[schedule]
cron = "*/15 * * * *"
retry_attempts = 3
retry_delay = "30s"CLI
bash
# Ejecutar pipeline manualmente
dune harvest run --pipeline db-sync
# ✦ Source: Oracle (hospital-db)
# ✦ Extracting... 47,291 rows
# ✦ Transform: Arrow columnar → Parquet (9x compression)
# ✦ Depositing to Harkonnen Vault (s3://data-lake/exports/)
# ✦ Complete: 47,291 rows in 0.4s (118K rows/s)
# ✦ Size: 42MB CSV → 4.7MB Parquet
# Ver jobs programados
dune harvest jobs list
# JOB SCHEDULE LAST RUN ROWS STATUS
# db-sync */15 * * * * 4m ago 47,291 success
# lab-results 0 * * * * 32m ago 12,847 success
# audit-export 0 2 * * * 8h ago 891,204 success
# Ver historial de un pipeline
dune harvest history db-sync --last 24h
# RUN ROWS DURATION PARQUET STATUS
# 2026-03-23 14:30 47,291 0.4s 4.7MB success
# 2026-03-23 14:15 47,105 0.4s 4.6MB success
# 2026-03-23 14:00 46,998 0.3s 4.6MB success