|
19 | 19 | ModelKind, |
20 | 20 | SCDType2ByColumnKind, |
21 | 21 | ViewKind, |
| 22 | + ManagedKind, |
22 | 23 | create_sql_model, |
23 | 24 | ) |
24 | 25 | from sqlmesh.core.model.kind import SCDType2ByTimeKind, OnDestructiveChange |
@@ -104,6 +105,9 @@ class ModelConfig(BaseModelConfig): |
104 | 105 |
|
105 | 106 | # snowflake |
106 | 107 | snowflake_warehouse: t.Optional[str] = None |
| 108 | + # note: for Snowflake dynamic tables, in the DBT adapter we only support properties that DBT supports |
| 109 | + # which are defined here: https://docs.getdbt.com/reference/resource-configs/snowflake-configs#dynamic-tables |
| 110 | + target_lag: t.Optional[str] = None |
107 | 111 |
|
108 | 112 | # Private fields |
109 | 113 | _sql_embedded_config: t.Optional[SqlStr] = None |
@@ -298,6 +302,10 @@ def model_kind(self, context: DbtContext) -> ModelKind: |
298 | 302 | return SCDType2ByTimeKind( |
299 | 303 | updated_at_name=self.updated_at, updated_at_as_valid_from=True, **shared_kwargs |
300 | 304 | ) |
| 305 | + |
| 306 | + if materialization == Materialization.DYNAMIC_TABLE: |
| 307 | + return ManagedKind() |
| 308 | + |
301 | 309 | raise ConfigError(f"{materialization.value} materialization not supported.") |
302 | 310 |
|
303 | 311 | @property |
@@ -399,8 +407,20 @@ def to_sqlmesh(self, context: DbtContext) -> Model: |
399 | 407 | if physical_properties: |
400 | 408 | model_kwargs["physical_properties"] = physical_properties |
401 | 409 |
|
402 | | - if context.target.dialect == "snowflake" and self.snowflake_warehouse is not None: |
403 | | - model_kwargs["session_properties"] = {"warehouse": self.snowflake_warehouse} |
| 410 | + if context.target.dialect == "snowflake": |
| 411 | + if self.snowflake_warehouse is not None: |
| 412 | + model_kwargs["session_properties"] = {"warehouse": self.snowflake_warehouse} |
| 413 | + |
| 414 | + if self.model_materialization == Materialization.DYNAMIC_TABLE: |
| 415 | + if not self.snowflake_warehouse: |
| 416 | + raise ConfigError("`snowflake_warehouse` must be set for dynamic tables") |
| 417 | + if not self.target_lag: |
| 418 | + raise ConfigError("`target_lag` must be set for dynamic tables") |
| 419 | + |
| 420 | + model_kwargs["physical_properties"] = { |
| 421 | + "warehouse": self.snowflake_warehouse, |
| 422 | + "target_lag": self.target_lag, |
| 423 | + } |
404 | 424 |
|
405 | 425 | return create_sql_model( |
406 | 426 | self.canonical_name(context), |
|
0 commit comments