An honest 2026 guide to data transformation tools, from dbt and SQLMesh to Dataform, Coalesce, Matillion, and Bruin. Which handle SQL and Python in one project, which give column-level lineage, which run on Snowflake, BigQuery, and Databricks, and which need a platform team.
Kateryna Kozachenko
Marketing & Growth
TL;DR: The best data transformation tools in 2026 are dbt for the default SQL path and the largest ecosystem, SQLMesh for the strongest technical alternative with virtual data environments and native column-level lineage, Dataform if you are committed to BigQuery, Coalesce for a visual approach on Snowflake, and Bruin if you want SQL and Python assets in one dependency graph alongside ingestion and quality checks. 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].
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.
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.
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.
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.
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.
Ours. 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.
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.
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.
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.
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.