Skip to content

Commit 4cc5413

Browse files
committed
Merge branch 'main' into 1.10.latest
2 parents 2c67661 + 92f1442 commit 4cc5413

File tree

13 files changed

+138
-187
lines changed

13 files changed

+138
-187
lines changed

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,12 @@
1-
## dbt-databricks 1.10.9 (TBD)
1+
## dbt-databricks 1.10.10 (TBD)
2+
3+
## dbt-databricks 1.10.9 (August 7, 2025)
4+
5+
### Features
6+
- Support column tags for views using `ALTER TABLE`
7+
8+
### Under the hood
9+
- Revert `REPLACE USING` syntax being used for insert overwrite ([1025](https://github.com/databricks/dbt-databricks/issues/1025))
210

311
## dbt-databricks 1.10.8 (August 4, 2025)
412

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
version = "1.10.8"
1+
version = "1.10.9"

dbt/adapters/databricks/relation_configs/view.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
DatabricksRelationConfigBase,
99
)
1010
from dbt.adapters.databricks.relation_configs.column_comments import ColumnCommentsProcessor
11+
from dbt.adapters.databricks.relation_configs.column_tags import ColumnTagsProcessor
1112
from dbt.adapters.databricks.relation_configs.comment import CommentProcessor
1213
from dbt.adapters.databricks.relation_configs.query import QueryProcessor
1314
from dbt.adapters.databricks.relation_configs.tags import TagsProcessor
@@ -21,6 +22,7 @@ class ViewConfig(DatabricksRelationConfigBase):
2122
QueryProcessor,
2223
CommentProcessor,
2324
ColumnCommentsProcessor,
25+
ColumnTagsProcessor,
2426
]
2527

2628
def get_changeset(self, existing: Self) -> Optional[DatabricksRelationChangeSet]:

dbt/include/databricks/macros/materializations/incremental/incremental.sql

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@
5252
{%- else -%}
5353
{{ log("Existing relation found, proceeding with incremental work")}}
5454
{#-- Set Overwrite Mode to DYNAMIC for subsequent incremental operations --#}
55-
{%- if incremental_strategy == 'insert_overwrite' and partition_by and adapter.compare_dbr_version(16, 3) < 0 -%}
55+
{%- if incremental_strategy == 'insert_overwrite' and partition_by -%}
5656
{{ set_overwrite_mode('DYNAMIC') }}
5757
{%- endif -%}
5858
{#-- Relation must be merged --#}
@@ -118,7 +118,7 @@
118118
{% do persist_docs(target_relation, model, for_relation=language=='python') %}
119119
{%- else -%}
120120
{#-- Set Overwrite Mode to DYNAMIC for subsequent incremental operations --#}
121-
{%- if incremental_strategy == 'insert_overwrite' and partition_by and adapter.compare_dbr_version(16, 3) < 0 -%}
121+
{%- if incremental_strategy == 'insert_overwrite' and partition_by -%}
122122
{{ set_overwrite_mode('DYNAMIC') }}
123123
{%- endif -%}
124124
{#-- Relation must be merged --#}
@@ -177,7 +177,7 @@
177177
{{ run_hooks(post_hooks) }}
178178
{%- endif -%}
179179

180-
{%- if incremental_strategy == 'insert_overwrite' and not full_refresh and adapter.compare_dbr_version(16, 3) < 0 -%}
180+
{%- if incremental_strategy == 'insert_overwrite' and not full_refresh -%}
181181
{{ set_overwrite_mode('STATIC') }}
182182
{%- endif -%}
183183

@@ -191,7 +191,7 @@
191191
set spark.sql.sources.partitionOverwriteMode = {{ value }}
192192
{%- endcall -%}
193193
{% else %}
194-
{{ exceptions.warn("INSERT OVERWRITE is supported on SQL warehouses with DBR 16.3+. On older DBR versions, this strategy would be equivalent to using the table materialization.") }}
194+
{{ exceptions.warn("INSERT OVERWRITE is only properly supported on all-purpose clusters. On SQL Warehouses, this strategy would be equivalent to using the table materialization.") }}
195195
{% endif %}
196196
{% endmacro %}
197197

@@ -216,4 +216,4 @@
216216
{%- set configuration_changes = model_config.get_changeset(existing_config) -%}
217217
{{ apply_config_changeset(target_relation, model, configuration_changes) }}
218218
{% endif %}
219-
{% endmacro %}
219+
{% endmacro %}

dbt/include/databricks/macros/materializations/incremental/strategies.sql

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -38,32 +38,9 @@
3838
{%- endfor -%}
3939
{%- set dest_cols_csv = dest_columns | join(', ') -%}
4040
{%- set source_cols_csv = common_columns | join(', ') -%}
41-
42-
{%- if adapter.compare_dbr_version(16, 3) >= 0 -%}
43-
{{ get_insert_replace_using_sql(source_relation, target_relation, source_cols_csv) }}
44-
{%- else -%}
45-
{#-- Use traditional INSERT OVERWRITE for older DBR versions --#}
46-
insert overwrite table {{ target_relation }}
47-
{{ partition_cols(label="partition") }}
48-
select {{ source_cols_csv }} from {{ source_relation }}
49-
{%- endif -%}
50-
{% endmacro %}
51-
52-
{% macro get_insert_replace_using_sql(source_relation, target_relation, source_cols_csv) %}
53-
{%- set partition_by = config.get('partition_by') -%}
54-
{%- if partition_by -%}
55-
{%- if partition_by is string -%}
56-
{%- set partition_by = [partition_by] -%}
57-
{%- endif -%}
58-
{%- set partition_cols_csv = partition_by | join(', ') -%}
59-
insert into table {{ target_relation }}
60-
replace using ({{ partition_cols_csv }})
61-
select {{ source_cols_csv }} from {{ source_relation }}
62-
{%- else -%}
63-
{#-- Fallback to regular insert if no partitions defined --#}
64-
insert overwrite table {{ target_relation }}
65-
select {{ source_cols_csv }} from {{ source_relation }}
66-
{%- endif -%}
41+
insert overwrite table {{ target_relation }}
42+
{{ partition_cols(label="partition") }}
43+
select {{source_cols_csv}} from {{ source_relation }}
6744
{% endmacro %}
6845

6946
{% macro get_replace_where_sql(args_dict) -%}

dbt/include/databricks/macros/materializations/incremental/validate.sql

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
You can only choose this strategy when file_format is set to 'delta'
2525
{%- endset %}
2626

27+
{% set invalid_insert_overwrite_endpoint_msg -%}
28+
Invalid incremental strategy provided: {{ raw_strategy }}
29+
You cannot use this strategy when connecting via warehouse
30+
Use the 'merge' or 'replace_where' strategy instead
31+
{%- endset %}
32+
2733
{% if raw_strategy not in adapter.valid_incremental_strategies() %}
2834
{{ log("WARNING - You are using an unsupported incremental strategy: " ~ raw_strategy) }}
2935
{{ log("You can ignore this warning if you are using a custom incremental strategy") }}

dbt/include/databricks/macros/materializations/view.sql

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
{{ get_create_view_as_sql(target_relation, sql) }}
3232
{%- endcall %}
3333
{{ apply_tags(target_relation, tags) }}
34+
{% set column_tags = adapter.get_column_tags_from_model(config.model) %}
35+
{% if column_tags and column_tags.set_column_tags %}
36+
{{ apply_column_tags(target_relation, column_tags) }}
37+
{% endif %}
3438
{% endif %}
3539
{% set should_revoke = should_revoke(exists_as_view, full_refresh_mode=True) %}
3640
{% do apply_grants(target_relation, grant_config, should_revoke=True) %}
@@ -57,6 +61,11 @@
5761

5862
{%- do apply_tags(target_relation, tags) -%}
5963

64+
{% set column_tags = adapter.get_column_tags_from_model(config.model) %}
65+
{% if column_tags and column_tags.set_column_tags %}
66+
{{ apply_column_tags(target_relation, column_tags) }}
67+
{% endif %}
68+
6069
{{ run_hooks(post_hooks) }}
6170
{% endif %}
6271

@@ -69,6 +78,11 @@
6978
{% set tags = config.get('databricks_tags') %}
7079
{{ execute_multiple_statements(get_replace_sql(existing_relation, target_relation, sql)) }}
7180
{%- do apply_tags(target_relation, tags) -%}
81+
82+
{% set column_tags = adapter.get_column_tags_from_model(config.model) %}
83+
{% if column_tags and column_tags.set_column_tags %}
84+
{{ apply_column_tags(target_relation, column_tags) }}
85+
{% endif %}
7286
{% endmacro %}
7387

7488
{% macro relation_should_be_altered(existing_relation) %}

dbt/include/databricks/macros/relations/components/column_tags.sql

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,12 @@
3434
{%- endmacro -%}
3535

3636
{% macro alter_set_column_tags(relation, column, tags) -%}
37-
ALTER {{ relation.type | replace('_', ' ') }} {{ relation.render() }}
37+
{# ALTER VIEW does not support setting column tags, but ALTER TABLE works for views #}
38+
{%- if relation.type == 'view' -%}
39+
ALTER TABLE {{ relation.render() }}
40+
{%- else -%}
41+
ALTER {{ relation.type | replace('_', ' ') }} {{ relation.render() }}
42+
{%- endif -%}
3843
ALTER COLUMN `{{ column }}`
3944
SET TAGS (
4045
{%- for tag_name, tag_value in tags.items() -%}

dbt/include/databricks/macros/relations/view/create.sql

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
{% if column_mask_exists() %}
33
{% do exceptions.raise_compiler_error("Column masks are not supported for views.") %}
44
{% endif %}
5-
{% if column_tags_exist() %}
6-
{% do exceptions.raise_compiler_error("Column tags are not supported for views.") %}
7-
{% endif %}
85
{{ log("Creating view " ~ relation) }}
96
create or replace view {{ relation.render() }}
107
{%- if config.persist_column_docs() -%}

tests/functional/adapter/column_tags/fixtures.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
select 1 as id, 'abc123' as account_number
33
"""
44

5-
model_with_column_tags = """
5+
initial_column_tag_model = """
66
version: 2
77
models:
88
- name: base_model
@@ -16,6 +16,22 @@
1616
sensitive: "true"
1717
"""
1818

19+
updated_column_tag_model = """
20+
version: 2
21+
models:
22+
- name: base_model
23+
config:
24+
materialized: table
25+
columns:
26+
- name: id
27+
databricks_tags:
28+
pii: "false"
29+
- name: account_number
30+
databricks_tags:
31+
pii: "true"
32+
sensitive: "true"
33+
"""
34+
1935
column_tags_seed = """
2036
id,account_number
2137
1,'1234567890'

0 commit comments

Comments
 (0)