Skip to content

Commit ad1cbb1

Browse files
committed
ignore partition_by for views to match dbt behavior
1 parent 00547b0 commit ad1cbb1

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
@@ -1671,6 +1671,18 @@ def test_partition_by(sushi_test_project: Project):
16711671
context.target = DuckDbConfig(name="target", schema="foo")
16721672
assert model_config.to_sqlmesh(context).partitioned_by == []
16731673

1674+
model_config = ModelConfig(
1675+
name="model",
1676+
alias="model",
1677+
schema="test",
1678+
package_name="package",
1679+
materialized=Materialization.VIEW.value,
1680+
unique_key="ds",
1681+
partition_by={"field": "ds", "granularity": "month"},
1682+
sql="""SELECT 1 AS one, ds FROM foo""",
1683+
)
1684+
assert model_config.to_sqlmesh(context).partitioned_by == []
1685+
16741686

16751687
@pytest.mark.xdist_group("dbt_manifest")
16761688
def test_partition_by_none(sushi_test_project: Project):

0 commit comments

Comments
 (0)