Skip to content

Commit dc19226

Browse files
authored
Fix: Warn instead of fail on incompatible incremental strategy for dbt models with a unique key (#5166)
1 parent d6ca41f commit dc19226

File tree

2 files changed

+14
-22
lines changed

2 files changed

+14
-22
lines changed

sqlmesh/dbt/model.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,11 @@ def model_kind(self, context: DbtContext) -> ModelKind:
293293
self.incremental_strategy
294294
and strategy not in INCREMENTAL_BY_UNIQUE_KEY_STRATEGIES
295295
):
296-
raise ConfigError(
297-
f"{self.canonical_name(context)}: SQLMesh incremental by unique key strategy is not compatible with '{strategy}'"
298-
f" incremental strategy. Supported strategies include {collection_to_str(INCREMENTAL_BY_UNIQUE_KEY_STRATEGIES)}."
296+
get_console().log_warning(
297+
f"Unique key is not compatible with '{strategy}' incremental strategy in model '{self.canonical_name(context)}'. "
298+
f"Supported strategies include {collection_to_str(INCREMENTAL_BY_UNIQUE_KEY_STRATEGIES)}. Falling back to 'merge' strategy."
299299
)
300+
strategy = "merge"
300301

301302
if self.incremental_predicates:
302303
dialect = self.dialect(context)

tests/dbt/test_transformation.py

Lines changed: 10 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -238,6 +238,16 @@ def test_model_kind():
238238
auto_restatement_cron="0 0 * * *",
239239
)
240240

241+
# Test incompatibile incremental strategies
242+
for incremental_strategy in ("delete+insert", "insert_overwrite", "append"):
243+
assert ModelConfig(
244+
materialized=Materialization.INCREMENTAL,
245+
unique_key=["bar"],
246+
incremental_strategy=incremental_strategy,
247+
).model_kind(context) == IncrementalByUniqueKeyKind(
248+
unique_key=["bar"], dialect="duckdb", forward_only=True, disable_restatement=False
249+
)
250+
241251
assert ModelConfig(
242252
materialized=Materialization.INCREMENTAL, time_column="foo", incremental_strategy="merge"
243253
).model_kind(context) == IncrementalByTimeRangeKind(
@@ -372,25 +382,6 @@ def test_model_kind():
372382
== ManagedKind()
373383
)
374384

375-
with pytest.raises(ConfigError):
376-
ModelConfig(
377-
materialized=Materialization.INCREMENTAL,
378-
unique_key=["bar"],
379-
incremental_strategy="delete+insert",
380-
).model_kind(context)
381-
with pytest.raises(ConfigError):
382-
ModelConfig(
383-
materialized=Materialization.INCREMENTAL,
384-
unique_key=["bar"],
385-
incremental_strategy="insert_overwrite",
386-
).model_kind(context)
387-
with pytest.raises(ConfigError):
388-
ModelConfig(
389-
materialized=Materialization.INCREMENTAL,
390-
unique_key=["bar"],
391-
incremental_strategy="append",
392-
).model_kind(context)
393-
394385

395386
def test_model_kind_snapshot_bigquery():
396387
context = DbtContext()

0 commit comments

Comments
 (0)