Skip to content

Feldera and Databricks Enzyme Demo#6612

Merged
anandbraman merged 1 commit into
mainfrom
feldera-databricks-ivm-demo
Jul 10, 2026
Merged

Feldera and Databricks Enzyme Demo#6612
anandbraman merged 1 commit into
mainfrom
feldera-databricks-ivm-demo

Conversation

@anandbraman

Copy link
Copy Markdown
Contributor

Describe Manual Test Plan

Checklist

  • Unit tests added/updated
  • Integration tests added/updated
  • Documentation updated
  • Changelog updated

Breaking Changes?

Mark if you think the answer is yes for any of these components:

Describe Incompatible Changes

@anandbraman anandbraman changed the title Feldera databricks ivm demo Feldera and Databricks Enzyme comparison Jul 9, 2026
@anandbraman anandbraman changed the title Feldera and Databricks Enzyme comparison Feldera and Databricks Enzyme Demo Jul 9, 2026

With Feldera, you use the same SQL your batch engine runs now, get the same results, and pay a cost that tracks change size instead of data size. In addition, you get millisecond update latency across your full medallion architecture.

Continue on to Part 4 for a comparison between Databricks' IVM offering (Lakeflow Declarative Pipelines) and Feldera. No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be a hyperlink?

return datetime.fromisoformat(value.replace("Z", "+00:00"))


def delta_connector(inputs: list, table: str) -> dict | None:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this seems to be list[dict], but maybe you don't know the dict type?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

added annotation

@@ -0,0 +1,497 @@
# Databricks notebook source
# MAGIC %md

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know what these MAGICs are

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just the syntax that defines a cell in a notebook

# MAGIC - **Silver / Gold** are `@dp.materialized_view`s, persisted in the pipeline's Unity
# MAGIC Catalog target schema.
# MAGIC
# MAGIC The business logic (SQL) is identical to the batch script and to the Feldera views

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it identical or equivalent?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

the business logic is identical. The sql is equivalent

@@ -0,0 +1,305 @@
# Part 4: Compare Feldera and Databricks Lakeflow Declarative Pipelines (Enzyme)

Parts [1](./part1.md)–[3](./part3.md) read the Bronze snapshot and CDC from Feldera's

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would actually list all 3 parts with a short summary for each of them and a hyperlink to make it easy for people to go there.

| `job.yaml` | Settings for the `compute_silver_gold` job (Step 2). |
| `measure_latency.py` | Reports Feldera's per-connector processing and end-to-end latency for changes (Step 4). |

## Prerequisites

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if you want to run the demo by yourself


## Step 3 — `ingest_bronze` as a data-generating process

Each run of the `ingest_bronze` task writes one hour of change into the Bronze Delta tables

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

one hour between updates is a lot... unless you are replaying an existing log very fast

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah the user just triggers the job that points to a file i.e., "2025-11-30T00". There's no schedule for the job, it's all interactive.


Feldera pays neither cost the same way. It is always on, so there is no per-run
provisioning, and it maintains every view incrementally, so the update is proportional to
the size of the change. Updates are reflected in less than a second for one CDC hour, not 58s.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

how about the machines resources used for these two? are they the same?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Databricks is serverless, so I'm not sure exactly what the resource usage is. Feldera doesn't use more than a couple GiBs of RAM

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That would be useful to find spell out. Can you guess the DBX usage based on cost?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

At this scale both cost very little. I'll be doing a cost analysis for the blog post where we test multiple times at 5 or so different scale factors. Serverless is called out as a dep in the DBX set up explicitly

| `gold_product_demand_surge` | Full recompute every refresh | Incremental |
| Orchestration | Job schedule + pipeline refresh | None — change-driven |
| Per-run startup | ~28s serverless provisioning | None — always on |
| Freshness for the first CDC hour | ~86s end-to-end | 0.37s at most |

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should be a graph with variance bars on measurements: run the measurements 10 times and plot some error bars for each measurement, with us and Databricks on the same graph. The graph should be the TLDR.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this would be a good idea for a blog post. @ryzhyk and I are going to publish something that tests with larger scale data. I'll run multiple experiements per scale factor

@mythical-fred mythical-fred left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two commit messages need cleanup before merge — see inline comments for details.

public demo bucket. This part deploys the Databricks assets into **your own** workspace
and **your own** S3 bucket, then repoints the Feldera pipeline at that bucket. Two things
run against the same Bronze Delta tables:

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: "Lakeflow Declarative Pipelies" → "Pipelines" (typo).

@mythical-fred

Copy link
Copy Markdown

Commits 2 and 3 (sidebar and add latency measure for feldera. provide comparison metrics for each platform) need rewriting before merge. These are lazy one-liners for non-trivial changes — the first adds a sidebar entry, the second adds an entire latency-measurement script and comparison results.

Please git rebase -i to either squash into a single well-structured commit or give each commit a proper subject + body explaining why. The first commit's message is good — use that as a model.

Git history is a first-class artifact. Resources:

Added configuration for a Lakeflow declarative pipeline. Users can copy the bronze data to their own bucket, see how Feldera works with snapshot_and_follow mode, and contrast with Databricks IVM solution (lakeflow declarative pipelines)

Signed-off-by: Anand Raman <anand.raman@feldera.com>
@anandbraman
anandbraman force-pushed the feldera-databricks-ivm-demo branch from e4e6ce2 to 5e74d7d Compare July 10, 2026 17:33

@mythical-fred mythical-fred left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Both blockers from my prior review are addressed — commits squashed into a single clean message, and the "Pipelies" typo is fixed. Content still reads well. Leaving Mihai's open discussion points (resource/cost breakdown for the Databricks side, variance-bar graph as a follow-up) to you two.

@anandbraman
anandbraman added this pull request to the merge queue Jul 10, 2026
Merged via the queue into main with commit b203ac3 Jul 10, 2026
1 check passed
@anandbraman
anandbraman deleted the feldera-databricks-ivm-demo branch July 10, 2026 22:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants