Skip to content

Commit 7b5ed2b

Browse files
authored
Fix: Use project dialect when parsing column_to_types for dbt projects (#1496)
1 parent aae8d85 commit 7b5ed2b

3 files changed

Lines changed: 23 additions & 16 deletions

File tree

sqlmesh/dbt/basemodel.py

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,6 @@ def sql_name(self) -> str:
186186
def model_materialization(self) -> Materialization:
187187
return Materialization.TABLE
188188

189-
@property
190-
def model_dialect(self) -> t.Optional[str]:
191-
return None
192-
193189
@property
194190
def relation_info(self) -> AttributeDict[str, t.Any]:
195191
if self.model_materialization == Materialization.VIEW:
@@ -246,7 +242,7 @@ def sqlmesh_model_kwargs(self, context: DbtContext) -> t.Dict[str, t.Any]:
246242

247243
return {
248244
"audits": [(test.name, {}) for test in self.tests],
249-
"columns": column_types_to_sqlmesh(self.columns) or None,
245+
"columns": column_types_to_sqlmesh(self.columns, context.dialect) or None,
250246
"column_descriptions_": column_descriptions_to_sqlmesh(self.columns) or None,
251247
"depends_on": {model.sql_name for model in model_context.refs.values()}.union(
252248
{source.sql_name for source in model_context.sources.values()}

sqlmesh/dbt/column.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,17 @@ def yaml_to_columns(
2222
return columns
2323

2424

25-
def column_types_to_sqlmesh(columns: t.Dict[str, ColumnConfig]) -> t.Dict[str, exp.DataType]:
25+
def column_types_to_sqlmesh(
26+
columns: t.Dict[str, ColumnConfig], dialect: t.Optional[str] = None
27+
) -> t.Dict[str, exp.DataType]:
2628
"""
2729
Get the sqlmesh column types
2830
2931
Returns:
3032
A dict of column name to exp.DataType
3133
"""
3234
return {
33-
name: parse_one(column.data_type, into=exp.DataType)
35+
name: parse_one(column.data_type, into=exp.DataType, dialect=dialect or "")
3436
for name, column in columns.items()
3537
if column.enabled and column.data_type
3638
}

tests/dbt/test_transformation.py

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
from sqlmesh.dbt.model import Materialization, ModelConfig
3030
from sqlmesh.dbt.project import Project
3131
from sqlmesh.dbt.seed import SeedConfig
32-
from sqlmesh.dbt.target import BigQueryConfig, DuckDbConfig
32+
from sqlmesh.dbt.target import BigQueryConfig, DuckDbConfig, SnowflakeConfig
3333
from sqlmesh.utils.errors import ConfigError, MacroEvalError, SQLMeshError
3434

3535

@@ -143,30 +143,37 @@ def test_model_columns():
143143
table_name="bar",
144144
sql="SELECT * FROM baz",
145145
columns={
146-
"address": ColumnConfig(
146+
"ADDRESS": ColumnConfig(
147147
name="address", data_type="text", description="Business address"
148148
),
149-
"zipcode": ColumnConfig(
149+
"ZIPCODE": ColumnConfig(
150150
name="zipcode", data_type="varchar(5)", description="Business zipcode"
151151
),
152+
"DATE": ColumnConfig(
153+
name="date", data_type="timestamp_ntz", description="Contract date"
154+
),
152155
},
153156
)
154157

155158
expected_column_types = {
156-
"address": parse_one("text", into=exp.DataType),
157-
"zipcode": parse_one("varchar(5)", into=exp.DataType),
159+
"ADDRESS": parse_one("text", into=exp.DataType),
160+
"ZIPCODE": parse_one("varchar(5)", into=exp.DataType),
161+
"DATE": parse_one("timestamp_ntz", into=exp.DataType, dialect="snowflake"),
158162
}
159163
expected_column_descriptions = {
160-
"address": "Business address",
161-
"zipcode": "Business zipcode",
164+
"ADDRESS": "Business address",
165+
"ZIPCODE": "Business zipcode",
166+
"DATE": "Contract date",
162167
}
163168

164-
assert column_types_to_sqlmesh(model.columns) == expected_column_types
169+
assert column_types_to_sqlmesh(model.columns, "snowflake") == expected_column_types
165170
assert column_descriptions_to_sqlmesh(model.columns) == expected_column_descriptions
166171

167172
context = DbtContext()
168173
context.project_name = "Foo"
169-
context.target = DuckDbConfig(name="target", schema="foo")
174+
context.target = SnowflakeConfig(
175+
name="target", schema="test", database="test", account="foo", user="bar", password="baz"
176+
)
170177
sqlmesh_model = model.to_sqlmesh(context)
171178
assert sqlmesh_model.columns_to_types == expected_column_types
172179
assert sqlmesh_model.column_descriptions == expected_column_descriptions
@@ -197,6 +204,8 @@ def test_seed_columns():
197204
}
198205

199206
context = DbtContext()
207+
context.project_name = "Foo"
208+
context.target = DuckDbConfig(name="target", schema="test")
200209
sqlmesh_seed = seed.to_sqlmesh(context)
201210
assert sqlmesh_seed.columns_to_types == expected_column_types
202211
assert sqlmesh_seed.column_descriptions == expected_column_descriptions

0 commit comments

Comments
 (0)