Skip to content

Commit 13b6cdd

Browse files
committed
feat: updating merge behaviour of databricks_tags
Signed-off-by: Can Bekleyici <can.bekleyici@deepl.com>
1 parent f936946 commit 13b6cdd

3 files changed

Lines changed: 21 additions & 5 deletions

File tree

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,11 @@
1313

1414
- Fix catalog names with special characters (e.g., hyphens) not being quoted in `SHOW SCHEMAS` commands, causing `INVALID_IDENTIFIER` errors ([#1325](https://github.com/databricks/dbt-databricks/issues/1325))
1515

16+
### Under the Hood
17+
18+
- **BREAKING:** `databricks_tags` defined at different hierarchy levels (e.g. project-level and model-level) now merge additively instead of the child config completely replacing the parent.
19+
20+
1621
## dbt-databricks 1.11.5 (Feb 19, 2026)
1722

1823
### Fixes

dbt/adapters/databricks/impl.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from collections.abc import Iterable, Iterator
66
from concurrent.futures import Future
77
from contextlib import contextmanager
8-
from dataclasses import dataclass
8+
from dataclasses import dataclass, field
99
from importlib import metadata
1010
from multiprocessing.context import SpawnContext
1111
from typing import TYPE_CHECKING, Any, ClassVar, Generic, NamedTuple, Optional, Union, cast
@@ -29,7 +29,7 @@
2929
SparkAdapter,
3030
)
3131
from dbt_common.behavior_flags import BehaviorFlag
32-
from dbt_common.contracts.config.base import BaseConfig
32+
from dbt_common.contracts.config.base import BaseConfig, MergeBehavior
3333
from dbt_common.exceptions import DbtConfigError, DbtInternalError
3434
from dbt_common.utils import executor
3535
from dbt_common.utils.dict import AttrDict
@@ -175,7 +175,7 @@ class DatabricksConfig(AdapterConfig):
175175
options: Optional[dict[str, str]] = None
176176
merge_update_columns: Optional[str] = None
177177
merge_exclude_columns: Optional[str] = None
178-
databricks_tags: Optional[dict[str, str]] = None
178+
databricks_tags: Optional[dict[str, str]] = field(default=None, metadata=MergeBehavior.Update.meta())
179179
query_tags: Optional[str] = None
180180
tblproperties: Optional[dict[str, str]] = None
181181
zorder: Optional[Union[list[str], str]] = None

tests/functional/adapter/tags/test_databricks_tags.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,17 @@ def models(self):
1515
"tags.sql": fixtures.tags_sql.replace("table", self.materialized),
1616
}
1717

18+
@pytest.fixture(scope="class")
19+
def project_config_update(self):
20+
return {
21+
"models": {
22+
"+databricks_tags": {
23+
"a": "TO_BE_REPLACED_AT_LOWER_LEVEL",
24+
"x": "y",
25+
}
26+
}
27+
}
28+
1829
def test_tags(self, project):
1930
_ = util.run_dbt(["run", "--models", "tags"])
2031
_ = util.run_dbt(["run", "--models", "tags"])
@@ -23,8 +34,8 @@ def test_tags(self, project):
2334
" where schema_name = '{schema}' and table_name='tags'",
2435
fetch="all",
2536
)
26-
assert len(results) == 3
27-
expected_tags = {("a", "b"), ("c", "d"), ("k", "")}
37+
assert len(results) == 4
38+
expected_tags = {("a", "b"), ("c", "d"), ("k", ""), ("x", "y")}
2839
actual_tags = set((row[0], row[1]) for row in results)
2940
assert actual_tags == expected_tags
3041

0 commit comments

Comments
 (0)