Skip to content

Commit 22c044f

Browse files
authored
fix: match dbt behavior to ignore partition_by for views (#5359)
1 parent f29a6b2 commit 22c044f

File tree

2 files changed

+38
-20
lines changed

2 files changed

+38
-20
lines changed

sqlmesh/dbt/model.py

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -510,27 +510,33 @@ def to_sqlmesh(
510510
physical_properties: t.Dict[str, t.Any] = {}
511511

512512
if self.partition_by:
513-
partitioned_by = []
514-
if isinstance(self.partition_by, list):
515-
for p in self.partition_by:
516-
try:
517-
partitioned_by.append(d.parse_one(p, dialect=model_dialect))
518-
except SqlglotError as e:
519-
raise ConfigError(
520-
f"Failed to parse model '{self.canonical_name(context)}' partition_by field '{p}' in '{self.path}': {e}"
521-
) from e
522-
elif isinstance(self.partition_by, dict):
523-
if context.target.dialect == "bigquery":
524-
partitioned_by.append(self._big_query_partition_by_expr(context))
525-
else:
526-
logger.warning(
527-
"Ignoring partition_by config for model '%s' targeting %s. The format of the config field is only supported for BigQuery.",
528-
self.name,
529-
context.target.dialect,
530-
)
513+
if isinstance(kind, ViewKind):
514+
logger.warning(
515+
"Ignoring partition_by config for model '%s'; partition_by is not supported for views.",
516+
self.name,
517+
)
518+
else:
519+
partitioned_by = []
520+
if isinstance(self.partition_by, list):
521+
for p in self.partition_by:
522+
try:
523+
partitioned_by.append(d.parse_one(p, dialect=model_dialect))
524+
except SqlglotError as e:
525+
raise ConfigError(
526+
f"Failed to parse model '{self.canonical_name(context)}' partition_by field '{p}' in '{self.path}': {e}"
527+
) from e
528+
elif isinstance(self.partition_by, dict):
529+
if context.target.dialect == "bigquery":
530+
partitioned_by.append(self._big_query_partition_by_expr(context))
531+
else:
532+
logger.warning(
533+
"Ignoring partition_by config for model '%s' targeting %s. The format of the config field is only supported for BigQuery.",
534+
self.name,
535+
context.target.dialect,
536+
)
531537

532-
if partitioned_by:
533-
optional_kwargs["partitioned_by"] = partitioned_by
538+
if partitioned_by:
539+
optional_kwargs["partitioned_by"] = partitioned_by
534540

535541
if self.cluster_by:
536542
if isinstance(kind, ViewKind):

tests/dbt/test_transformation.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,6 +1683,18 @@ def test_partition_by(sushi_test_project: Project):
16831683
context.target = DuckDbConfig(name="target", schema="foo")
16841684
assert model_config.to_sqlmesh(context).partitioned_by == []
16851685

1686+
model_config = ModelConfig(
1687+
name="model",
1688+
alias="model",
1689+
schema="test",
1690+
package_name="package",
1691+
materialized=Materialization.VIEW.value,
1692+
unique_key="ds",
1693+
partition_by={"field": "ds", "granularity": "month"},
1694+
sql="""SELECT 1 AS one, ds FROM foo""",
1695+
)
1696+
assert model_config.to_sqlmesh(context).partitioned_by == []
1697+
16861698

16871699
@pytest.mark.xdist_group("dbt_manifest")
16881700
def test_partition_by_none(sushi_test_project: Project):

0 commit comments

Comments
 (0)