From 12c1e6ccb378f9552d126783e110a3e707dd299b Mon Sep 17 00:00:00 2001 From: Chris Rericha Date: Tue, 2 Sep 2025 15:07:25 -0400 Subject: [PATCH 1/4] Fix: Ignore bigquery partition_by config when the target isn't bigquery --- sqlmesh/dbt/model.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sqlmesh/dbt/model.py b/sqlmesh/dbt/model.py index 9833b49876..9ce118ac3a 100644 --- a/sqlmesh/dbt/model.py +++ b/sqlmesh/dbt/model.py @@ -521,9 +521,11 @@ def to_sqlmesh( raise ConfigError( f"Failed to parse model '{self.canonical_name(context)}' partition_by field '{p}' in '{self.path}': {e}" ) from e - else: + elif isinstance(self.partition_by, dict) and context.target.dialect == "bigquery": partitioned_by.append(self._big_query_partition_by_expr(context)) - optional_kwargs["partitioned_by"] = partitioned_by + + if partitioned_by: + optional_kwargs["partitioned_by"] = partitioned_by if self.cluster_by: if isinstance(kind, ViewKind): From 44f0fc11b2671dfc4a0d95952e30f355cc0f7e6a Mon Sep 17 00:00:00 2001 From: Chris Rericha Date: Wed, 3 Sep 2025 11:16:59 -0400 Subject: [PATCH 2/4] Improvements --- sqlmesh/dbt/model.py | 12 ++++++++++-- tests/dbt/test_transformation.py | 3 +++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/sqlmesh/dbt/model.py b/sqlmesh/dbt/model.py index 9ce118ac3a..bb1af5f690 100644 --- a/sqlmesh/dbt/model.py +++ b/sqlmesh/dbt/model.py @@ -38,6 +38,9 @@ logger = logging.getLogger(__name__) +logger = logging.getLogger(__name__) + + INCREMENTAL_BY_TIME_STRATEGIES = set(["delete+insert", "insert_overwrite", "microbatch"]) INCREMENTAL_BY_UNIQUE_KEY_STRATEGIES = set(["merge"]) @@ -521,8 +524,13 @@ def to_sqlmesh( raise ConfigError( f"Failed to parse model '{self.canonical_name(context)}' partition_by field '{p}' in '{self.path}': {e}" ) from e - elif isinstance(self.partition_by, dict) and context.target.dialect == "bigquery": - partitioned_by.append(self._big_query_partition_by_expr(context)) + elif isinstance(self.partition_by, dict): + if context.target.dialect == "bigquery": + partitioned_by.append(self._big_query_partition_by_expr(context)) + else: + logger.warning( + f"Ignoring partition_by config for model '{self.name}' targeting {context.target.dialect}; it is only supported for bigquery." + ) if partitioned_by: optional_kwargs["partitioned_by"] = partitioned_by diff --git a/tests/dbt/test_transformation.py b/tests/dbt/test_transformation.py index d6de34c1c6..22a331b8aa 100644 --- a/tests/dbt/test_transformation.py +++ b/tests/dbt/test_transformation.py @@ -1469,6 +1469,9 @@ def test_partition_by(sushi_test_project: Project): model_config.partition_by = {"field": "ds", "data_type": "date", "granularity": "day"} assert model_config.to_sqlmesh(context).partitioned_by == [exp.to_column("ds", quoted=True)] + context.target = DuckDbConfig(name="target", schema="foo") + assert model_config.to_sqlmesh(context).partitioned_by == [] + @pytest.mark.xdist_group("dbt_manifest") def test_partition_by_none(sushi_test_project: Project): From 6b6ec242359dd965fa56c872de63462767245c9e Mon Sep 17 00:00:00 2001 From: Chris Rericha <67359577+crericha@users.noreply.github.com> Date: Wed, 3 Sep 2025 11:56:15 -0400 Subject: [PATCH 3/4] Update sqlmesh/dbt/model.py Co-authored-by: Iaroslav Zeigerman --- sqlmesh/dbt/model.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sqlmesh/dbt/model.py b/sqlmesh/dbt/model.py index bb1af5f690..1397b896c4 100644 --- a/sqlmesh/dbt/model.py +++ b/sqlmesh/dbt/model.py @@ -529,7 +529,7 @@ def to_sqlmesh( partitioned_by.append(self._big_query_partition_by_expr(context)) else: logger.warning( - f"Ignoring partition_by config for model '{self.name}' targeting {context.target.dialect}; it is only supported for bigquery." + "Ignoring partition_by config for model '%s' targeting %s; it is only supported for BigQuery.", self.name, context.target.dialect ) if partitioned_by: From 6910716ed447ad4c6df72c10db385d29006c22d4 Mon Sep 17 00:00:00 2001 From: Chris Rericha Date: Wed, 3 Sep 2025 12:02:01 -0400 Subject: [PATCH 4/4] log messaging improvements --- sqlmesh/dbt/model.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sqlmesh/dbt/model.py b/sqlmesh/dbt/model.py index 1397b896c4..a941eb8880 100644 --- a/sqlmesh/dbt/model.py +++ b/sqlmesh/dbt/model.py @@ -529,7 +529,9 @@ def to_sqlmesh( partitioned_by.append(self._big_query_partition_by_expr(context)) else: logger.warning( - "Ignoring partition_by config for model '%s' targeting %s; it is only supported for BigQuery.", self.name, context.target.dialect + "Ignoring partition_by config for model '%s' targeting %s. The format of the config field is only supported for BigQuery.", + self.name, + context.target.dialect, ) if partitioned_by: @@ -538,7 +540,8 @@ def to_sqlmesh( if self.cluster_by: if isinstance(kind, ViewKind): logger.warning( - f"Ignoring cluster_by config for model '{self.name}'; cluster_by is not supported for views." + "Ignoring cluster_by config for model '%s'; cluster_by is not supported for views.", + self.name, ) else: clustered_by = []