For teams on Snowflake, Databricks and BigQuery
Take ETL off your warehouse bill
- Offload ETL from your warehouse and cut its cost 10x
- Incremental compute on the cheapest engine per job
- Data written back to your Snowflake, Databricks or BigQuery catalog
- Deployed entirely in your cloud account
- Fully automated migration with a transpiler and a 100% match check
- On your warehouse
- 100%
- On Zipline
- 10%
10x lower
Illustrative. Your savings estimate uses your own query history.
Proven in production at
Every job moves to the cheapest engine that can run it
Iceberg tables every engine can read
A warehouse's native format, like Snowflake's FDN or BigQuery's Capacitor, can only be read by that warehouse's engine. Apache Iceberg can be read by all of them. Zipline writes plain Iceberg tables to your object store, so you keep one copy of the data.
Large joins and aggregations go to Spark on spot instances. A 10-row lookup doesn't need a cluster, so it runs on DuckDB. Dashboard queries run on Snowflake, against the same tables.
Fully automated migration
-
Estimate
A read-only pass over your warehouse's query history ranks your jobs by cost and estimates what each would cost on Zipline. Get yours
-
Transpile
Zipline's transpiler rewrites each query for the engine its job will run on.
-
Verify
Zipline runs the old and new queries on the same data and compares the results row by row. A job cuts over only once they match 100%.
-
Cut over
The new output goes to the same table in your catalog, so downstream queries don't change. Pipelines move one at a time, starting with the most expensive.
Zipline makes joins and aggregations cheap
Most of an ETL bill goes to two kinds of queries: the joins that build silver tables and the aggregations that build gold tables. Zipline buckets, clusters and incrementalizes your tables automatically, so your team doesn't have to tune any of these optimizations by hand.
Incremental aggregations
Take a metric like total revenue per merchant. It typically gets recomputed every day from the entire transaction log. Zipline adds today's partial totals to yesterday's totals, so each run reads one day of raw data. You write the plain aggregation, and Zipline makes it incremental.
Rolling windows work the same way. Zipline keeps partials that cover 1, 2, 4, 8 or more days, so a 90-day window is merged from a handful of them (log N reads) instead of 90 days of raw data.
The savings are 100x or more when a job goes from reading years of raw data to reading a single day.
Shuffle-free joins
A join usually sends rows across the network so each one can meet its match. That shuffle is most of the cost of a silver table. If both tables are bucketed the same way in Iceberg, bucket 1 only needs bucket 1, and the join becomes a local merge (Iceberg calls this a storage-partitioned join).
It is hard to set up by hand, so most teams end up with shuffle-heavy jobs that are 5 to 10x slower and costlier. Zipline buckets your tables automatically, so joins on the same key skip the shuffle with no setup.
Serverless runtime with continuous tuning
Zipline's runtime is fully elastic. A cluster comes up for each job and scales to zero when it finishes, so there is nothing to size or keep running.
Spot nodes make jobs about 4x cheaper, and ARM CPUs with local NVMe drives cut their runtime by about 3x. Each run is tuned from the ones before it.
Zipline also clusters tables along a Hilbert curve automatically, so queries skip the files they don't need.
Move dashboard compute to the write side
Dashboards and apps run the same aggregations every time someone opens a page, even though the answer only changes when new data arrives. Zipline computes those results once, when the data lands, and keeps them current.
Gold tables that update when new data lands
The query behind each chart becomes a gold table, and Zipline updates it incrementally as new data lands.
Dashboards in Looker, Tableau or Sigma still query Snowflake, Databricks or BigQuery. They read a few thousand precomputed rows instead of scanning the raw table on every refresh.
Real-time metrics from one key lookup
Some numbers have to stay fresh, like a live ops dashboard or a fraud signal. For those, Zipline merges the event stream with batch history as events arrive.
It writes the finished value for each key to the online index, so a read is one lookup instead of an aggregation over recent events.
No separate Airflow or dbt code to maintain
Zipline infers the dependency graph from your queries and fills the tables in dependency order on a schedule. If you already run Airflow or dbt, it can plug into them through Iceberg table sensors instead.
Data quality checks are on by default. Zipline profiles every column of every table it writes and flags drift with measures like PSI and Jensen-Shannon divergence, so nobody has to write or tune a check.
Runs in your cloud account and uses your existing governance
Zipline is self-hosted, so no data or metadata leaves your account. It runs on AWS, Azure and GCP today.
It reads and writes through your existing catalog, such as Unity Catalog, AWS Glue or any Iceberg REST catalog. Zipline's service account only sees what you grant it. The tables it writes are registered in that catalog, so your existing permissions decide who can query them.
- You provision
- A managed Kubernetes cluster (EKS, AKS or GKE) and an object store (S3, Azure Blob Storage or GCS).
- We give you
- Helm charts and keys to install Zipline into that cluster.
Online and reverse ETL ready
Zipline combines your warehouse tables and event streams into one online index. It answers search queries and point lookups with p95 latency under 10 ms.
The index holds the features, embeddings and context those systems read. A fraud model can check a customer's features at checkout, and a support agent can pull an account's recent history before it replies.
Teams also use these signals as guardrails for AI agents. Before an agent acts, Zipline can check the action against rules your organization writes.
Built by data infrastructure engineers
We come from Airbnb, Stripe and Google, and we contribute to Apache Iceberg and Spark. Our customers run some of the largest Snowflake, BigQuery and Databricks deployments. They use Zipline to shrink the cost of the ETL that feeds those systems.
Questions
Do we have to leave Snowflake or Databricks?
No. Zipline writes Apache Iceberg tables, and Snowflake, Databricks and BigQuery all read Iceberg. Most teams move the expensive pipelines first and leave dashboards and ad hoc queries on the warehouse.
Do we have to rewrite our SQL?
No. Zipline's transpiler rewrites them for the engine each job runs on, and no job cuts over until its results match the old ones exactly.
Does it work with our existing governance?
Yes. Zipline reads and writes through your existing catalog (Unity Catalog, AWS Glue, Snowflake Open Catalog or any Iceberg REST catalog) with a service account you grant access to. The tables it writes are registered in that catalog, so your current permissions and policies decide who can query them.
We already run Airflow and dbt. Does that still work?
Yes. Zipline can schedule everything itself, and it can also plug into an existing Airflow or dbt setup through Iceberg table sensors, so you can move one pipeline at a time.
What do we need to provision?
A managed Kubernetes cluster (EKS, AKS or GKE) and an object store (S3, Azure Blob Storage or GCS). We give you Helm charts and keys to install Zipline into that cluster.
How long does a proof of concept take?
Typically 2 to 4 weeks, on your own data and in your own cloud account. We start with the jobs that cost you the most.
Get a savings estimate
Tell us which warehouse you use, and one of our founders will get back to you to work out what your ETL would cost on Zipline.