← All work

High-volume B2B2C photography platform

One order model across two product lines, inside a live photography lakehouse

A high-volume photography platform needed more of its live data in its Databricks lakehouse, and reports that matched the source. We extended its change data capture pipeline, fixed how deletes reached reporting and merged both product lines into one order model.

Data & AnalyticsLakehouse reporting pipelinesModernized a live product

Worked in
The platform's Databricks, AWS and Terraform repos
First month
Ten core tables added and verified in the silver layer
Order model
One fact table across both product lines
Reports
Metabase moved to the updated reporting catalog

The challenge

Order, gallery and marketing data sat in live production databases for two product lines, and the reporting layer needed more tables, correct current state and one shared order model.

What we did

Working in the platform's own repositories and Databricks catalogs: new replication tasks, incremental loading, a fix to change data capture, and gold models joining both product lines.

The outcome

Reporting tables moved to the catalog Metabase reads, silver now reflects deletes correctly, and a unified order fact table merges both product lines, checked against Metabase.

The starting point

A high-volume B2B2C photography platform that runs online galleries and ordering for photography businesses and their customers, across two product lines. It has its own engineering team, data leadership and a Databricks lakehouse on AWS.

What had to change

Reporting needed order, cart, campaign and gallery tables that were not yet in the lakehouse, and the second product line's data was outside the shared model. Some reporting tables also did not match the source databases.

What could not break

  • Production databases keep serving customers as they are
  • New tables arrive through the client's own replication and Terraform repositories
  • Changes are proven in the development catalog before production
  • Production access follows the client's own permission process
  • Reporting tables must reflect the true current state of each source

The calls we made

We learned the pipeline as it was, then extended and fixed it inside the platform's own repositories and catalogs.

  1. 01

    Extend the pipeline already there

    We read the existing raw to bronze and bronze to silver notebooks first, then added each table through the client's own replication tasks and notebooks, so its team kept one pipeline to run.

    Ruled out

    A parallel pipeline the platform's team would have to run separately.

  2. 02

    Incremental loads keyed on the source

    For each table we identified primary keys and sort fields for change data capture, then built incremental loading into the silver layer instead of full reloads.

    Ruled out

    Full reloads of every table on each run.

  3. 03

    Silver has to match the source

    When counts did not match, we traced them to the replication layer and fixed the change data capture step's delete handling and ranking, so silver shows the true current state.

    Ruled out

    Patching the reports to hide the mismatch.

  4. 04

    One order model for both product lines

    Order data from the two product lines was merged into one gold fact table under one schema, then checked against the numbers Metabase already showed.

    Ruled out

    A separate order report for each product line.

How the system fits together

change datachange dataraw rowscurrent stateorders,galleriesreportingtablesorder modelreportsProduct line AdatabasesLive MySQL: orders,carts,…Product line BdatabasesLive: orders,members,…Replication tasksAWS DMS change datacapture, new…Bronze layerRaw tables landed inDelta LakeSilver layerIncremental loads,corrected…Gold modelsUnified order facttable,…ReportingcatalogSilver tablesreporting reads fromMetabaseThe client's reportsand dashboards
Client's existing systemBuilt by DaticsData storeThe source databases keep running as they are; new replication tasks, silver fixes and gold models were added inside the platform's own AWS and Databricks environment.

What we built

01

Replication for new source tables

Change data capture tasks for order, cart, campaign, gallery and price sheet tables, then marketing tables and the second product line's orders, members and stores, all as pull requests in the client's Terraform repository.

02

Incremental silver layer

Incremental loading into silver, a fix to how the change data capture step handles deletes and ranks updates, and checks of counts against the source databases.

03

Reporting catalog for Metabase

Reporting tables moved into the client's reporting catalog, with Metabase pointed at the updated data.

04

Gold models across both product lines

A unified order fact table that merges both product lines under one schema, tuned for daily runs, and a rebuilt client gallery metrics model in SQL.

How it works

Capture

Replication tasks pick up inserts, updates and deletes from the live databases without changing them.

Land

Raw rows land in the bronze layer of the client's lakehouse.

Reconcile

Incremental jobs keep silver at the true current state of each source table.

Model

Gold jobs merge both product lines into one order fact table and gallery metrics.

Report

Metabase reads the reporting catalog and the gold models.

A closer look

What changed

The reporting layer gained the order, cart, campaign, gallery and marketing tables it was missing, and silver now reflects deletes and updates correctly. Metabase reads the updated reporting catalog, and a unified order fact table brings both product lines under one schema.

Under the hood

Datics role
Engineering delivered by Datics
Sources
Live MySQL production databases for both product lines, read through AWS DMS change data capture.
Processing
Delta Lake bronze, silver and gold layers in Databricks, with Spark notebooks and scheduled workflows.
Consumers
Metabase reports on the reporting catalog and the gold order and gallery models.
Boundary
Everything ran in the platform's own AWS and Databricks environment, through its Terraform repository and permission process.

Cloud and infrastructure

AWS DMS

Also in the stack

MySQLTerraformSparkDelta LakeDatabricks WorkflowsDatabricks SQLMetabase

How it shipped

  1. Learn the pipeline

    Sync meetings with the client's team, a read of the existing notebooks, and parity between the development and production replication setup.

  2. Add and verify tables

    Ten core tables added and verified in the development silver layer, with incremental loading built alongside.

  3. Fix and widen

    The change data capture fix, count mismatches traced to replication, marketing tables and the second product line's tables brought in.

  4. Model for reporting

    Tables moved to the reporting catalog for Metabase, then the unified order fact table and gallery metrics models in gold.

Through their repositories and reviews

New replication tasks went in as pull requests to the platform's shared Terraform repository, reviewed and merged by its own engineers.

Their catalogs, their access rules

All work ran in the platform's own AWS account and Databricks catalogs, on accounts it issued, with development tested before production.

Written reports each month

Every month closed with a written work report: tables added, fixes made and pull requests opened.

What this unlocked

With both product lines in one order model, reporting and any future forecasting or AI features start from the same numbers.

Have a product with the same kind of constraints?

Tell us what already exists and what you want it to do. We will tell you what it takes.

Book a 30-minute Product Review