Skip to content

Commit fdf2f89

Browse files
authored
fix: dbt time column serialization (#5336)
1 parent a6945cb commit fdf2f89

File tree

6 files changed

+17
-13
lines changed

6 files changed

+17
-13
lines changed

sqlmesh/dbt/model.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
OnAdditiveChange,
3232
on_destructive_change_validator,
3333
on_additive_change_validator,
34-
TimeColumn,
3534
)
3635
from sqlmesh.dbt.basemodel import BaseModelConfig, Materialization, SnapshotStrategy
3736
from sqlmesh.dbt.common import SqlStr, sql_str_validator
@@ -86,7 +85,7 @@ class ModelConfig(BaseModelConfig):
8685

8786
# sqlmesh fields
8887
sql: SqlStr = SqlStr("")
89-
time_column: t.Optional[TimeColumn] = None
88+
time_column: t.Optional[t.Union[str, t.Dict[str, str]]] = None
9089
cron: t.Optional[str] = None
9190
interval_unit: t.Optional[str] = None
9291
batch_concurrency: t.Optional[int] = None
@@ -153,7 +152,6 @@ class ModelConfig(BaseModelConfig):
153152
_sql_validator = sql_str_validator
154153
_on_destructive_change_validator = on_destructive_change_validator
155154
_on_additive_change_validator = on_additive_change_validator
156-
_time_column_validator = TimeColumn.validator()
157155

158156
@field_validator(
159157
"unique_key",

tests/dbt/test_manifest.py

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import pytest
66

77
from sqlmesh.core.config import ModelDefaultsConfig
8-
from sqlmesh.core.model import TimeColumn
98
from sqlmesh.dbt.basemodel import Dependencies
109
from sqlmesh.dbt.common import ModelAttrs
1110
from sqlmesh.dbt.context import DbtContext
@@ -82,9 +81,9 @@ def test_manifest_helper(caplog):
8281
macros=[MacroReference(name="ref")],
8382
)
8483
assert waiter_as_customer_by_day_config.materialized == "incremental"
85-
assert waiter_as_customer_by_day_config.incremental_strategy == "delete+insert"
84+
assert waiter_as_customer_by_day_config.incremental_strategy == "incremental_by_time_range"
8685
assert waiter_as_customer_by_day_config.cluster_by == ["ds"]
87-
assert waiter_as_customer_by_day_config.time_column == TimeColumn.create("ds", "duckdb")
86+
assert waiter_as_customer_by_day_config.time_column == "ds"
8887

8988
if DBT_VERSION >= (1, 5, 0):
9089
waiter_revenue_by_day_config = models["waiter_revenue_by_day_v2"]
@@ -104,9 +103,9 @@ def test_manifest_helper(caplog):
104103
has_dynamic_var_names=True,
105104
)
106105
assert waiter_revenue_by_day_config.materialized == "incremental"
107-
assert waiter_revenue_by_day_config.incremental_strategy == "delete+insert"
106+
assert waiter_revenue_by_day_config.incremental_strategy == "incremental_by_time_range"
108107
assert waiter_revenue_by_day_config.cluster_by == ["ds"]
109-
assert waiter_revenue_by_day_config.time_column == TimeColumn.create("ds", "duckdb")
108+
assert waiter_revenue_by_day_config.time_column == "ds"
110109
assert waiter_revenue_by_day_config.dialect_ == "bigquery"
111110

112111
assert helper.models("customers")["customers"].dependencies == Dependencies(

tests/dbt/test_model.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
from sqlmesh import Context
1010
from sqlmesh.core.model import TimeColumn, IncrementalByTimeRangeKind
1111
from sqlmesh.core.model.kind import OnDestructiveChange, OnAdditiveChange
12+
from sqlmesh.core.state_sync.db.snapshot import _snapshot_to_json
1213
from sqlmesh.dbt.common import Dependencies
1314
from sqlmesh.dbt.context import DbtContext
1415
from sqlmesh.dbt.model import ModelConfig
@@ -328,7 +329,8 @@ def test_load_incremental_time_range_strategy_required_only(
328329

329330
snapshot_fqn = '"local"."main"."incremental_time_range"'
330331
context = Context(paths=project_dir)
331-
model = context.snapshots[snapshot_fqn].model
332+
snapshot = context.snapshots[snapshot_fqn]
333+
model = snapshot.model
332334
# Validate model-level attributes
333335
assert model.start == "2025-01-01"
334336
assert model.interval_unit.is_day
@@ -342,6 +344,8 @@ def test_load_incremental_time_range_strategy_required_only(
342344
assert model.depends_on_self is False
343345
assert model.kind.auto_restatement_intervals is None
344346
assert model.kind.partition_by_time_column is True
347+
# make sure the snapshot can be serialized to json
348+
assert isinstance(_snapshot_to_json(snapshot), str)
345349

346350

347351
@pytest.mark.slow
@@ -381,7 +385,8 @@ def test_load_incremental_time_range_strategy_all_defined(
381385

382386
snapshot_fqn = '"local"."main"."incremental_time_range"'
383387
context = Context(paths=project_dir)
384-
model = context.snapshots[snapshot_fqn].model
388+
snapshot = context.snapshots[snapshot_fqn]
389+
model = snapshot.model
385390
# Validate model-level attributes
386391
assert model.start == "2025-01-01"
387392
assert model.interval_unit.is_day
@@ -402,6 +407,8 @@ def test_load_incremental_time_range_strategy_all_defined(
402407
assert model.kind.batch_size == 3
403408
assert model.kind.batch_concurrency == 2
404409
assert model.depends_on_self is False
410+
# make sure the snapshot can be serialized to json
411+
assert isinstance(_snapshot_to_json(snapshot), str)
405412

406413

407414
@pytest.mark.slow

tests/fixtures/dbt/sushi_test/models/waiter_as_customer_by_day.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{
22
config(
33
materialized='incremental',
4-
incremental_strategy='delete+insert',
4+
incremental_strategy='incremental_by_time_range',
55
cluster_by=['ds'],
66
time_column='ds',
77
)

tests/fixtures/dbt/sushi_test/models/waiter_revenue_by_day.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{
22
config(
33
materialized='incremental',
4-
incremental_strategy='delete+insert',
4+
incremental_strategy='incremental_by_time_range',
55
cluster_by=['ds'],
66
time_column='ds',
77
dialect="bigquery"

tests/fixtures/dbt/sushi_test/models/waiter_revenue_by_day_v1.sql

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{{
22
config(
33
materialized='incremental',
4-
incremental_strategy='delete+insert',
4+
incremental_strategy='incremental_by_time_range',
55
cluster_by=['ds'],
66
time_column='ds',
77
dialect="bigquery"

0 commit comments

Comments
 (0)