CData Sync alternative — CData Sync vs Skippr
CData Sync is replication. You pick a source from CData's driver catalog, pick a destination, and a job copies rows on a schedule. Standard licensing is incremental replication: watermark or change-tracking queries, schema follow, up to five standard connections and 100 million processed rows a month for 7,999 USD a year, cloud or on-prem. Log CDC is a different SKU. It reads WAL, redo, binlog, or native change tracking, keeps an LSN, and is listed under "other configurations" as quote, next to unlimited rows, premium connectors, transforms, RBAC, SSO, and the REST API. v26 (January 2026) writes Iceberg to S3, Azure Blob, ADLS, and GCS, and still writes Delta. AWS AMI hourly is 2.74 USD for Professional (10 connections) and 4.87 USD for Enterprise (20). The same page sells reverse ETL. Sync is not a Streamhouse. There is no SQL engine in the job.
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 row-band meter. ELT into a warehouse is one path, not the product.
| Feature | Skippr | CData Sync |
|---|---|---|
| Deploy | Single Rust binary, your VPC or on-prem | Sync Cloud, on-prem, or AWS/Azure AMI |
| Schema | In-stream evolution, sibling columns | Automated schema change on the job |
| Storage | Open Iceberg on Parquet you own | Warehouse, Delta, or Iceberg on object storage (v26) |
| CDC | Log-based; fails closed if the dest cannot honour | Quote add-on. Standard is incremental, not log CDC |
| Query | skipprd query on Iceberg ∪ WAL; history in any Iceberg engine | Destination after the job. No lake SQL in Sync |
| Pricing | Free self-hosted engine | 7,999 USD/year Standard (5 connections, 100M rows/month). CDC is quote. |
What CData Sync is good at
A source CData already ships a driver for. That is the product. Salesforce, SAP, IBM i, and a long tail of SaaS land in Snowflake or SQL Server without you writing JDBC. Incremental jobs are cheap to stand up. Iceberg in v26 means the same job can write an open table on S3 instead of only a warehouse. If the job is "this obscure app into a table tonight," that is a real product.
Where the job is wider
Sync is a replicator. It is not a Streamhouse. There is no Iceberg ∪ WAL. There is no skipprd query on in-flight rows. The job ends; then you query Snowflake or Athena.
CDC is the ops. The 7,999 USD card is incremental. Log CDC, unlimited rows, and premium connectors are quote. A processed-row band is not a log. Enhanced CDC for SAP HANA and IBM Db2 exists; it is still that add-on. Hourly AMI looks small until the instance runs all month.
Skippr will not match CData's SaaS driver catalog. Skippr also will not reverse-ETL a warehouse back into Salesforce. If the job is "driver we already have, scheduled copy," Sync is the narrower tool. If the job is live SQL on Iceberg you run, Sync 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 CData Sync if you need a CData driver into a warehouse or Iceberg files, and a scheduled job is enough.
Choose Skippr if you want one binary, live SQL, and Iceberg files that stay yours. Skippr will not ship CData's SaaS catalog.
Install from Install. Connector and query reference live in Developer Docs. For optional onboarding in your VPC, Enterprise Jumpstart or Contact.
