Skip to content

Data transformation and modeling

Choose by how safely a change becomes trusted data.

A scheduler can start a job successfully while the resulting table contains duplicate revenue. Transformation tools describe models, dependencies and checks; their deployment model determines how changes reach consumers. I would compare that lifecycle before comparing command syntax.

Sources reviewed: 2026-09-06. This is a documentary comparison using official code and documentation. Shortlists are editorial judgments, not measured performance scores. The reviewed release and edition matter.

At a glance

Rating (1–5): an editorial readiness score for the fit named in the same row, dated 2026-09-06. It adds five criteria worth 0, 0.5 or 1 point each: maintenance, open edition (what the open-source edition includes without a paid tier), maturity and community, operating scope and interoperability, with caps for archived, stale or prerelease projects. The breakdown sits under the table and the method on the Blog index. A rating is not a benchmark or a universal ranking; the workload sections still decide.

Project Rating Core license I would shortlist it for Main constraint
dbt Core 1.12.3 5/5 Apache-2.0 SQL modeling with an existing dbt project and adapter ecosystem Adapter, packages, incremental strategy and job execution need their own compatibility checks.
SQLMesh 0.236.1 4/5 Apache-2.0 Planning model changes, interval backfills and environment promotion Model state and virtual environments become part of the operating contract.
Dataform Core 3.0.68 4/5 Apache-2.0 SQLX transformations in a BigQuery-centered platform The open-source framework and Google Cloud's managed service have different deployment scopes.
Bruin 0.11.749 4/5 Apache-2.0 One project combining SQL, Python, ingestion and quality checks Its broader pipeline scope needs explicit boundaries with an existing orchestrator.
How each rating was computed

Five criteria worth 0, 0.5 or 1 point each. Caps: archived upstream 1, no stable release in 18 months 2, no general-availability release 2.5. "Open edition" scores what the open-source edition includes without a paid tier. Scored on 2026-09-06 from the official repository, releases and documentation; the method is on the Blog index.

Project Maintenance Open edition Maturity Operations Interoperability Rating
dbt Core 1 1 1 1 1 5
SQLMesh 1 1 0.5 0.5 1 4
Dataform Core 1 1 0.5 1 0.5 4
Bruin 1 1 0.5 1 0.5 4

All four reviewed cores use a permissive license. Check the terms of commercial services and adjacent runtimes separately.

Start with the workload

  • A working dbt estate: keep dbt Core on the shortlist. Require evidence that a migration improves change safety, recovery or operating effort. Port packages, macros, tests and adapter behavior in the trial.
  • Frequent changes to partitioned models: compare SQLMesh's plans and environments against the actual dbt deployment process. Include state recovery and the cost of historical restatements.
  • BigQuery and an existing Google Cloud operating model: compare Dataform Core and the managed Dataform service separately. Decide which execution, identity and repository responsibilities the service owns.
  • A compact mixed SQL/Python pipeline: try Bruin when ingestion and transformation belong in the same repository. Decide whether Bruin or an external orchestrator owns retries and scheduling for each step.

Version and operating notes

dbt Core — specify the runtime and adapter

The reviewed Core repository provides the open-source transformation framework. Pin Core, the database adapter and project packages together. Test incremental writes with duplicate and late data, including a schema change during a backfill.

The technology stack also tracks Core v2, which reached release candidate 1 on 2026-09-02. That is a separate adoption decision from this stable v1 baseline. A release candidate is not evidence that existing adapters or macros already support it.

SQLMesh — protect plans, state and intervals

SQLMesh's model lifecycle includes change plans, backfill intervals, tests and audits. Its virtual environments can reuse physical results when appropriate.

The state guidance identifies persisted model and execution metadata. Restore that state with the warehouse objects it references. Test a partial backfill and a rollback after a model changes meaning; reverting a view alone does not prove that historical data has been corrected.

Dataform — distinguish framework and managed service

Dataform Core provides SQLX and dependency-based compilation. Google's managed Dataform service manages workflows that execute SQL in BigQuery.

Trial compilation with the actual service account and dataset locations. Check assertions, release configuration and execution configuration. Reproduce an unavailable upstream table and a permission change; a successful compilation does not establish runtime access to the data.

Bruin — decide who owns each pipeline step

The reviewed Bruin project combines ingestion, SQL/Python transformation and data quality in a CLI. This overlaps part of an orchestrator's responsibility.

Run a mixed-language pipeline locally and in its intended execution environment. Trace credentials and intermediate outputs, then retry after a completed external write. Avoid independent retry policies multiplying the same side effect across nested schedulers.

Where Fusion and processing libraries fit

dbt Fusion has a separate licensing boundary. Its license matrix uses Elastic License 2.0 by default, with named Apache-licensed directories. Do not inherit Core's Apache label for the whole Fusion distribution. Evaluate its exact runtime, adapter support and terms as a separate artifact.

Ibis 12.0.0, Polars and Spark help express or execute transformations. Their role differs from owning model promotion, backfills and production state. In this site's data stack, DuckDB and other engines supply execution while the modeling layer supplies reproducible change management.

Likewise, Airflow or Dagster can coordinate a transformation job. An orchestrator and a modeling framework can be useful together; running both requires one clear owner for each responsibility.

A trial that can change the decision

Use the same orders, customers and daily revenue model for each candidate. Keep the execution engine and input snapshot fixed.

  1. Correctness: reconcile revenue after duplicate orders, late arrivals, a corrected exchange rate and a deleted customer.
  2. Change impact: alter a shared model and inspect which dependent models rebuild. Compare the resulting data, not only the generated plan.
  3. Recovery: interrupt a run between writes, restore its metadata and resume without duplicating externally visible effects.
  4. Release isolation: verify that development cannot replace production tables or expose unapproved results to dashboards.
  5. Cost: record warehouse work, temporary storage, backfill duration and operator time. Separate compilation speed from query execution time.

Follow the data

Model the lakehouse tables, schedule their updates with an orchestrator, and expose useful results through OLAP and BI. Use observability to detect stale or failed outputs; technical success and business correctness need different checks.