Oracle Data Integrator alternative — ODI vs Skippr
Oracle Data Integrator is E-LT. You draw a mapping. A Knowledge Module (KM) generates SQL, Hive, or Spark that runs on the source or the target. The engine is the database, not a middle-tier transform farm. Studio talks to a master and work repository. Agents run the sessions. Current docs are 14c (14.1.2). CDC is a Journalizing KM: simple J$ tables for one subscriber, or consistent-set journals when parent-child order matters. GoldenGate JKMs exist; they need a GoldenGate license on every capture and delivery host. List on third-party 2026 cards is about 30,000 USD a processor or 900 USD a Named User Plus (ten users per processor minimum). The license follows the agent host. OCI Marketplace has a free listing that may only load Oracle Cloud databases, and a BYOL listing without that cap. You still pay the VM and the repository database. Oracle's newer cloud path is OCI Data Integration / Data Transforms, not a new ODI SKU.
Skippr is an open Streamhouse you run as one Rust binary. Write skippr.yml (or the same thing in Python), discover, sync. You query live state over Iceberg ∪ WAL, and the history is ordinary Iceberg in your bucket. No WebLogic agent. ELT into a warehouse is one path, not the product.
| Feature | Skippr | Oracle Data Integrator |
|---|---|---|
| Deploy | Single Rust binary, your VPC or on-prem | Studio, repositories, agents. Marketplace VM or on-prem |
| Schema | In-stream evolution, sibling columns | Mapping plus KM. Physical schema is a topology object |
| Storage | Open Iceberg on Parquet you own | Wherever the KM writes (Oracle, warehouse, Hadoop, files) |
| CDC | Log-based; fails closed if the dest cannot honour | Journalizing KMs. GoldenGate JKMs are a second license |
| Query | skipprd query on Iceberg ∪ WAL; history in any Iceberg engine | Target after the session. No lake SQL in ODI |
| Pricing | Free self-hosted engine | Processor or NUP on agent hosts. See Oracle's price list. |
What Oracle Data Integrator is good at
Pushdown is the honest idea. A set-based load stays a set-based load. The KM library is why Oracle shops still move E-Business and warehouse dimensions without standing up Spark. 14c still talks to GoldenGate and Enterprise Manager. If you already have a repository, a weekend batch window, and DBAs who will read generated SQL, that is a real product.
Where the job is wider
ODI is a mapping studio. It is not a Streamhouse. There is no Iceberg ∪ WAL. There is no skipprd query on in-flight rows. A session ends; then you query Oracle.
CDC that looks cheap in a JKM is not cheap if it is GoldenGate. Simple CDC writes one J$ row per subscriber per change. Consistent-set is the newer default for a reason. Agent hosts in AWS or Azure count two vCPUs as one processor under Oracle's authorized-cloud rule, with no core-factor discount. An autoscaling group licenses the max, not the average.
Skippr will not import a KM or an OWB migration. Skippr also will not replace an E-Business extract estate. If the job is "generate SQL on Oracle, schedule it," ODI is the narrower tool. If the job is live SQL on Iceberg you run, ODI was never that.
Getting started
Install skipprd from the install guide, or pip install skippr. The three tabs write the same skippr.yml. Then discover, sync, and query.
skippr:
workspace: analytics
skipprd_el_storage_mode: local
pipelines:
orders:
data_source: data_sources.app_db
data_sink: data_sinks.lake
data_sources:
app_db:
Postgres:
host: db.internal
user: skippr_reader
password: ${APP_DB_PASSWORD}
database: app
tables: [orders, customers]
cdc_mode: snapshot_then_cdc
data_sinks:
lake:
AthenaIceberg:
warehouse: s3://my-iceberg-warehouse/
glue_database_name: analytics
athena_workgroup_name: primary
athena_results_s3_bucket: my-athena-results
region: us-east-1
schema_sink: schema_sinks.lake_schema
schema_sinks:
lake_schema:
AthenaIceberg:
warehouse: s3://my-iceberg-warehouse/
glue_database_name: analytics
athena_workgroup_name: primary
athena_results_s3_bucket: my-athena-results
region: us-east-1skipprd --workspace analytics --storage-mode local connect data-source postgres \
--pipeline orders \
--name app_db \
--host db.internal \
--user skippr_reader \
--password '${APP_DB_PASSWORD}' \
--database app \
--tables orders \
--tables customers \
--cdc-mode snapshot_then_cdc
skipprd connect data-sink athenaiceberg \
--pipeline orders \
--name lake \
--warehouse s3://my-iceberg-warehouse/ \
--glue-database-name analytics \
--athena-workgroup-name primary \
--athena-results-s3-bucket my-athena-results \
--region us-east-1
skipprd connect schema-sink athenaiceberg \
--pipeline orders \
--name lake_schemafrom skippr import (
Config,
DataSinkAthenaIceberg,
DataSourcePostgres,
DataSourcePostgresSourceCdcMode,
EnvRef,
LocalStorage,
Pipeline,
)
cfg = Config().workspace("analytics").storage(LocalStorage())
app_db = cfg.data_source(
"app_db",
DataSourcePostgres(
host="db.internal",
user="skippr_reader",
password=EnvRef("APP_DB_PASSWORD"),
database="app",
tables=["orders", "customers"],
cdc_mode=DataSourcePostgresSourceCdcMode.SNAPSHOTTHENCDC,
),
)
lake = cfg.data_sink(
"lake",
DataSinkAthenaIceberg(
warehouse="s3://my-iceberg-warehouse/",
glue_database_name="analytics",
athena_workgroup_name="primary",
athena_results_s3_bucket="my-athena-results",
region="us-east-1",
),
schema_sink="lake_schema",
)
cfg.pipeline("orders", Pipeline(data_source=app_db, data_sink=lake))
cfg.save("skippr.yml")export APP_DB_PASSWORD='your-postgres-password'
skipprd discover --pipeline orders
skipprd sync --pipeline orders --once
skipprd query "SELECT count(*) FROM analytics.orders"Which to choose
Choose ODI if you want Knowledge Module E-LT on Oracle (or a KM target), and a warehouse after the session is enough.
Choose Skippr if you want one binary, no agent license, live SQL, and Iceberg files that stay yours. Skippr will not run an ODI mapping.
Install from Install. Connector and query reference live in Developer Docs. For optional onboarding in your VPC, Enterprise Jumpstart or Contact.
