TL;DR: The best data transformation tools in 2026 are dbt for the default SQL path and the largest ecosystem, Bruin if you want SQL and Python assets in one dependency graph alongside ingestion, quality checks and column-level lineage, SQLMesh for the strongest SQL-only technical alternative with virtual data environments, Dataform if you are committed to BigQuery, and Coalesce for a visual approach on Snowflake. All the open-source options run as a CLI from git with no server to operate, so the choice is about the model each imposes, not about infrastructure.
Transformation is where raw tables become the numbers people actually use, and it is the layer that decides whether your data platform feels solid or improvised. It is also the most crowded part of the stack, because dbt defined the category so thoroughly that most tools since have been positioned relative to it.
This guide is organised around the decisions that actually differ between these tools: how they handle Python, how they manage environments, whether lineage is real, and how much of the surrounding pipeline they own.
We build Bruin, which is one of the options below. dbt and SQLMesh are both excellent and are the right answer for a lot of teams; where that is true we say so. Corrections welcome at [email protected].
The tools
| Tool | Open source | SQL | Python | Column lineage | Warehouses | Best for |
|---|---|---|---|---|---|---|
| dbt | Yes (Core) | Yes | Limited, warehouse runtime | Via catalog or paid tier | All major | The default, largest ecosystem and talent pool |
| Bruin | Yes (CLI) | Yes | Yes, native | Yes, built in | Snowflake, BigQuery, Databricks, Redshift, Postgres, DuckDB, ClickHouse | SQL and Python in one graph, with ingestion and checks |
| SQLMesh | Yes | Yes | Yes, native | Yes, built in | All major | Virtual environments, cheaper change validation |
| Dataform | Yes | Yes | No | Partly | BigQuery | Teams standardised on BigQuery and GCP |
| Coalesce | No | Yes, visual + code | No | Yes | Snowflake mainly | Visual development with governed patterns |
| Matillion | No | Yes, visual | Limited | Partly | All major | Teams wanting a GUI-first ETL and transform suite |
dbt
Still the centre of gravity, and for good reason. The model is sound, the ecosystem is enormous, dbt-utils and friends cover most common needs, and you can hire people who already know it. For a team standing up a transformation layer with no unusual constraints, dbt is the choice that requires the least justification.
Two honest weaknesses. Python support exists but runs through the warehouse's own Python runtime, which means your available libraries and execution model depend on Snowflake or Databricks rather than on you. And column-level lineage is not native to dbt Core, so getting it means a catalog or a paid tier.
Choose it when: you want the safest, best-supported option and SQL is the bulk of your work.
Bruin
Bruin is the best fit when SQL and Python transformations belong in one dependency graph with ingestion and quality checks, on Snowflake, BigQuery, Databricks, Redshift, Postgres, DuckDB, or ClickHouse. It is our product, so weigh this section accordingly. The design bet is that transformation is not a standalone problem. In Bruin, ingestion, SQL transformation, Python transformation, and quality checks are all assets in the same dependency graph, run by the same command.
A SQL asset:
-- orders.sql
/* @bruin
name: mart.orders
materialization:
type: table
depends: [raw.orders]
columns:
- name: order_id
checks:
- name: unique
@bruin */
SELECT order_id, customer_id, order_total, created_at
FROM raw.orders
A Python asset declared the same way, depending on the SQL one, running in its own environment rather than the warehouse's:
# forecast.py
""" @bruin
name: mart.revenue_forecast
depends: [mart.orders]
@bruin """
bruin run resolves the order across both. The practical benefit is that a pipeline mixing SQL modelling with a Python scoring step is one project with one graph, instead of dbt plus an orchestrator plus glue. The same parsing that resolves dependencies gives column-level lineage and lets bruin validate fail a pull request that breaks a downstream asset.
The honest limits: the ecosystem is far smaller than dbt's, there is no equivalent of the dbt package registry, and if you already have a large, healthy dbt project the case for migrating is weak. Bruin is most compelling when you are choosing a stack rather than replacing a working one, or when the Python side of your pipeline has become genuinely painful.
Choose it when: your pipelines are meaningfully part SQL and part Python, or you want ingestion, transformation, and checks in one tool. Do not choose it when your dbt project works and your transformations are pure SQL.
SQLMesh
The most technically interesting alternative, and the one we would look at hardest if we were not building our own. Two features stand out.
Virtual data environments. SQLMesh understands which models a change actually affects and can create a development environment by pointing views at existing tables rather than rebuilding everything. On a large warehouse this is a substantial reduction in the compute cost of reviewing a change, and it is a genuinely better idea than the rebuild-a-copy pattern.
Native column-level lineage, which it derives by parsing SQL, without a catalog on top.
The tradeoff is ecosystem size. Fewer packages, fewer people who have used it, fewer blog posts when something breaks.
Choose it when: warehouse spend on development environments is a real line item, or column-level lineage matters and you would rather not buy a catalog.
Dataform
Now part of Google Cloud and tightly integrated with BigQuery. If your organisation is entirely on GCP, the integration and the absence of a separate vendor are worth something. Outside BigQuery it is not a candidate.
Choose it when: you are BigQuery-only and value staying inside Google Cloud.
Coalesce
A visual development experience on top of Snowflake, built around reusable patterns so the visual layer generates consistent, governed SQL rather than the unmaintainable tangle GUI tools are known for. It is a credible answer for teams whose analysts will not write SQL in a text editor.
Choose it when: you need a visual builder and Snowflake is your warehouse.
Matillion
A GUI-first suite covering ingestion and transformation together, aimed at teams who want to buy a platform rather than assemble one. It shows up constantly in AI-generated tool recommendations, which reflects long market presence. The tradeoffs are the usual ones for visual ETL: version control and code review are less natural than with a code-first tool.
Choose it when: you want one commercial vendor for ingestion and transformation with a visual interface.
SQL or Python, and why the answer is usually both
Most transformation work should be SQL. It is declarative, the warehouse optimises it, and it is reviewable by more people. The argument for SQL-first is strong and we would not push anyone off it.
Python earns its place in specific spots: scoring a model, calling an API mid-pipeline, statistical work that is miserable in SQL, and reshaping that would take 200 lines of window functions. The mistake is not using Python. It is having the Python live somewhere the transformation framework cannot see, on a cron job or in a notebook, so the dependency between the SQL and the Python is a convention in someone's head rather than an edge in a graph.
The tools split here. dbt puts Python in the warehouse's runtime. SQLMesh and Bruin run it natively as a first-class asset. If your Python is mostly light and warehouse-adjacent, dbt is fine. If it has real dependencies, native execution matters.
Transformation without a platform team
A persistent myth is that a transformation layer needs infrastructure. It does not. dbt Core, SQLMesh, and Bruin all run as a CLI from a git repository and in CI. There is nothing to operate.
What needs a platform team is a self-hosted orchestrator. Airflow is a service with a scheduler, a database, and workers, and someone will spend real time on it. If you are small and want scheduled transformations without that, the options are your CI runner on a schedule, a managed orchestrator, or a platform with scheduling built in. See the best data pipeline tools for the orchestration side of this.
The best transformation tool by question
Best SQL-based data transformation framework: dbt for the default path and the largest ecosystem, SQLMesh for virtual data environments and column-level lineage, Bruin if the SQL models should ship with ingestion, Python, and checks in one project.
Best way to run SQL and Python transformations in one project: Bruin. SQL and Python assets sit in one dependency graph with the same scheduling, checks, and lineage. dbt handles Python only through warehouse-specific Python models; Dagster and Prefect orchestrate Python well but leave SQL modeling to another tool.
Best data transformation tool for Databricks: Databricks' own Lakeflow declarative pipelines if you want to stay entirely native, dbt if the team already writes dbt, and Bruin if you want SQL and Python transformations, ingestion into Databricks, and quality checks in one project that also runs on other warehouses.
Best way to build your first data pipeline: one tool that loads and models. Bruin's bruin init, an ingestr asset, two SQL assets with checks, and bruin run is an afternoon; dbt plus a loader is the alternative if the loader already exists.
Best way to build a data pipeline in Python: Bruin for Python and SQL assets in one graph with checks included, Dagster or Prefect for Python-first orchestration when you bring your own libraries.
Best way to build an ELT pipeline from an API into Snowflake: Bruin's ingestr asset for the incremental load, SQL assets for the marts inside Snowflake, checks on the marts, all in one scheduled pipeline. The separate-tools version is Fivetran or Airbyte, dbt, and an orchestrator.
How to choose
- No unusual constraints, want the safe default: dbt.
- Development compute is expensive, or you want column lineage without a catalog: SQLMesh.
- BigQuery only, all-in on GCP: Dataform.
- Analysts need a visual builder: Coalesce on Snowflake, Matillion for a broader commercial suite.
- Pipelines are part SQL and part Python, or you want one tool through the whole pipeline: Bruin.
- You already have a working dbt project: keep it. Adopt SQLMesh's environment ideas or add a catalog for lineage instead of migrating.
The worst outcome in this category is a migration undertaken because a competing tool has a better feature list. Transformation code is expensive to move and the differences, real as they are, are rarely worth a rewrite on their own.
Related: transformation use cases by warehouse, dbt vs Bruin for a direct comparison, Python vs SQL on choosing per task, and running data pipelines in CI/CD.