Skip to content

Commit e720276

Browse files
committed
feat: add skip_optimize model config to opt out of post-materialization OPTIMIZE
Adds a `skip_optimize` model config that lets users opt out of the post-materialization OPTIMIZE call without removing zorder/liquid_clustered_by/auto_liquid_cluster from the table definition. Complements the existing run-wide DATABRICKS_SKIP_OPTIMIZE var by allowing project-, folder-, or model-level opt-out via standard dbt config inheritance. Resolves #703 Co-authored-by: Isaac
1 parent b90fb0a commit e720276

4 files changed

Lines changed: 21 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
### Features
44

55
- Expose `job_id`, `job_run_id`, and `task_run_id` from the Databricks Jobs `dbt_task` runtime in `adapter_response`, enabling correlation between dbt runs and Databricks workflow executions via `run_results.json` ([#1451](https://github.com/databricks/dbt-databricks/pull/1451) closes [#722](https://github.com/databricks/dbt-databricks/issues/722))
6+
- Add `skip_optimize` model config to opt out of the post-materialization `OPTIMIZE` call without dropping `zorder` / `liquid_clustered_by` / `auto_liquid_cluster` from the table definition. Useful when `OPTIMIZE` is delegated to Predictive Optimization or scheduled out of band. Complements the existing run-wide `DATABRICKS_SKIP_OPTIMIZE` var by allowing project-, folder-, or model-level opt-out via standard dbt config inheritance ([#703](https://github.com/databricks/dbt-databricks/issues/703)).
67

78
### Fixes
89

dbt/adapters/databricks/impl.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,7 @@ class DatabricksConfig(AdapterConfig):
197197
query_tags: Optional[str] = None
198198
tblproperties: Optional[dict[str, str]] = None
199199
zorder: Optional[Union[list[str], str]] = None
200+
skip_optimize: Optional[bool] = None
200201
unique_tmp_table_suffix: bool = False
201202
skip_non_matched_step: Optional[bool] = None
202203
skip_matched_step: Optional[bool] = None

dbt/include/databricks/macros/relations/optimize.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
{% endmacro %}
44

55
{%- macro databricks__optimize(relation) -%}
6-
{%- if var('DATABRICKS_SKIP_OPTIMIZE', 'false')|lower != 'true' and
6+
{%- if config.get('skip_optimize', false) -%}
7+
{%- elif var('DATABRICKS_SKIP_OPTIMIZE', 'false')|lower != 'true' and
78
var('databricks_skip_optimize', 'false')|lower != 'true' and
89
adapter.resolve_file_format(config) == 'delta' -%}
910
{%- if (config.get('zorder', False) or config.get('liquid_clustered_by', False)) or config.get('auto_liquid_cluster', False) -%}

tests/unit/macros/relations/test_optimize_macros.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,3 +41,20 @@ def test_macros_optimize_with_skip(self, key_val, var, template_bundle):
4141
r = self.render_bundle(template_bundle, "optimize")
4242

4343
assert r == ""
44+
45+
@pytest.mark.parametrize(
46+
"cluster_key,cluster_val",
47+
[
48+
("zorder", "foo"),
49+
("liquid_clustered_by", ["foo"]),
50+
("auto_liquid_cluster", True),
51+
],
52+
)
53+
def test_macros_optimize_with_skip_optimize_config(
54+
self, cluster_key, cluster_val, config, template_bundle
55+
):
56+
config[cluster_key] = cluster_val
57+
config["skip_optimize"] = True
58+
r = self.render_bundle(template_bundle, "optimize")
59+
60+
assert r == ""

0 commit comments

Comments
 (0)