diff --git a/sqlmesh/dbt/model.py b/sqlmesh/dbt/model.py index 58a8ea7f29..124d900c4b 100644 --- a/sqlmesh/dbt/model.py +++ b/sqlmesh/dbt/model.py @@ -510,27 +510,33 @@ def to_sqlmesh( physical_properties: t.Dict[str, t.Any] = {} if self.partition_by: - partitioned_by = [] - if isinstance(self.partition_by, list): - for p in self.partition_by: - try: - partitioned_by.append(d.parse_one(p, dialect=model_dialect)) - except SqlglotError as e: - 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): - if context.target.dialect == "bigquery": - partitioned_by.append(self._big_query_partition_by_expr(context)) - else: - logger.warning( - "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 isinstance(kind, ViewKind): + logger.warning( + "Ignoring partition_by config for model '%s'; partition_by is not supported for views.", + self.name, + ) + else: + partitioned_by = [] + if isinstance(self.partition_by, list): + for p in self.partition_by: + try: + partitioned_by.append(d.parse_one(p, dialect=model_dialect)) + except SqlglotError as e: + 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): + if context.target.dialect == "bigquery": + partitioned_by.append(self._big_query_partition_by_expr(context)) + else: + logger.warning( + "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: - optional_kwargs["partitioned_by"] = partitioned_by + if partitioned_by: + optional_kwargs["partitioned_by"] = partitioned_by if self.cluster_by: if isinstance(kind, ViewKind): diff --git a/tests/dbt/test_transformation.py b/tests/dbt/test_transformation.py index 9876edbe38..22b75abab6 100644 --- a/tests/dbt/test_transformation.py +++ b/tests/dbt/test_transformation.py @@ -1683,6 +1683,18 @@ def test_partition_by(sushi_test_project: Project): context.target = DuckDbConfig(name="target", schema="foo") assert model_config.to_sqlmesh(context).partitioned_by == [] + model_config = ModelConfig( + name="model", + alias="model", + schema="test", + package_name="package", + materialized=Materialization.VIEW.value, + unique_key="ds", + partition_by={"field": "ds", "granularity": "month"}, + sql="""SELECT 1 AS one, ds FROM foo""", + ) + assert model_config.to_sqlmesh(context).partitioned_by == [] + @pytest.mark.xdist_group("dbt_manifest") def test_partition_by_none(sushi_test_project: Project):