Skip to content

Commit b783c97

Browse files
authored
propagate meta/tags on columns to top-level and config (#11992)
1 parent 5add25d commit b783c97

File tree

9 files changed

+1220
-1085
lines changed

9 files changed

+1220
-1085
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
kind: Fixes
2+
body: Propagate column meta/tags from config to tests
3+
time: 2025-09-10T16:39:05.129379-04:00
4+
custom:
5+
Author: michelleark
6+
Issue: "11984"

core/dbt/parser/common.py

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -222,19 +222,30 @@ def _add(self, column: HasColumnProps) -> None:
222222
):
223223
raise ParsingError(f"Invalid constraint type on column {column.name}")
224224

225+
# Merge meta and tags from column and config
226+
column_config_meta = (
227+
column.config["meta"] if isinstance(column.config.get("meta"), dict) else {}
228+
)
229+
column_config_tags = []
230+
if "tags" in column.config:
231+
if isinstance(column.config["tags"], list):
232+
column_config_tags = column.config["tags"]
233+
elif isinstance(column.config["tags"], str):
234+
column_config_tags = [column.config["tags"]]
235+
236+
column_meta = {**column.meta, **column_config_meta}
237+
column_tags = list(set(tags + column_config_tags))
225238
self.column_info[column.name] = ColumnInfo(
226239
name=column.name,
227240
description=column.description,
228241
data_type=column.data_type,
229242
constraints=[ColumnLevelConstraint.from_dict(c) for c in column.constraints],
230-
meta=column.meta,
231-
tags=tags,
243+
meta=column_meta,
244+
tags=column_tags,
232245
quote=quote,
233246
_extra=column.extra,
234247
granularity=granularity,
235-
config=ColumnConfig(
236-
meta=column.config.get("meta", {}), tags=column.config.get("tags", [])
237-
),
248+
config=ColumnConfig(meta=column_meta, tags=column_tags),
238249
)
239250

240251
@classmethod

core/dbt/parser/schema_generic_tests.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,11 @@ def parse_test(
383383
should_quote = column.quote or (column.quote is None and target_block.quote_columns)
384384
if should_quote:
385385
column_name = get_adapter(self.root_project).quote(column_name)
386-
column_tags = column.tags
386+
387+
column_config_tags = column.config.get("tags", [])
388+
if isinstance(column_config_tags, str):
389+
column_config_tags = [column_config_tags]
390+
column_tags = list(set(column.tags + column_config_tags))
387391

388392
block = GenericTestBlock.from_test_block(
389393
src=target_block,

core/dbt/parser/sources.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,11 @@ def parse_source_test(
262262
tags_sources = [target.source.tags, target.table.tags]
263263
if column is not None:
264264
tags_sources.append(column.tags)
265+
if column_config_tags := column.config.get("tags", []):
266+
if isinstance(column_config_tags, list):
267+
tags_sources.append(column_config_tags)
268+
elif isinstance(column_config_tags, str):
269+
tags_sources.append([column_config_tags])
265270
tags = list(itertools.chain.from_iterable(tags_sources))
266271

267272
generic_test_parser = self.get_generic_test_parser_for(target.package_name)

0 commit comments

Comments
 (0)