From d55881b3e9dfce0a7e6a1a1c7f0a955da6ff6e84 Mon Sep 17 00:00:00 2001 From: bentsileviav Date: Tue, 4 Feb 2025 14:53:55 +0200 Subject: [PATCH 1/2] remove unreachable exchange code + support replace view --- .../macros/materializations/view.sql | 59 +++++-------------- 1 file changed, 14 insertions(+), 45 deletions(-) diff --git a/dbt/include/clickhouse/macros/materializations/view.sql b/dbt/include/clickhouse/macros/materializations/view.sql index f59d2d50..42e51d77 100644 --- a/dbt/include/clickhouse/macros/materializations/view.sql +++ b/dbt/include/clickhouse/macros/materializations/view.sql @@ -2,52 +2,24 @@ {%- set existing_relation = load_cached_relation(this) -%} {%- set target_relation = this.incorporate(type='view') -%} - {%- set backup_relation = none -%} - {%- set preexisting_backup_relation = none -%} - {%- set preexisting_intermediate_relation = none -%} - - {% if existing_relation is not none %} - {%- set backup_relation_type = existing_relation.type -%} - {%- set backup_relation = make_backup_relation(target_relation, backup_relation_type) -%} - {%- set preexisting_backup_relation = load_cached_relation(backup_relation) -%} - {% if not existing_relation.can_exchange %} - {%- set intermediate_relation = make_intermediate_relation(target_relation) -%} - {%- set preexisting_intermediate_relation = load_cached_relation(intermediate_relation) -%} - {% endif %} - {% endif %} {% set grant_config = config.get('grants') %} {{ run_hooks(pre_hooks, inside_transaction=False) }} - -- drop the temp relations if they exist already in the database - {{ drop_relation_if_exists(preexisting_intermediate_relation) }} - {{ drop_relation_if_exists(preexisting_backup_relation) }} - -- `BEGIN` happens here: {{ run_hooks(pre_hooks, inside_transaction=True) }} - {% if backup_relation is none %} + {% if existing_relation is none %} {{ log('Creating new relation ' + target_relation.name )}} - -- There is not existing relation, so we can just create - {% call statement('main') -%} - {{ get_create_view_as_sql(target_relation, sql) }} - {%- endcall %} - {% elif existing_relation.can_exchange %} - -- We can do an atomic exchange, so no need for an intermediate - {% call statement('main') -%} - {{ get_create_view_as_sql(backup_relation, sql) }} - {%- endcall %} - {% do exchange_tables_atomic(backup_relation, existing_relation) %} {% else %} - -- We have to use an intermediate and rename accordingly - {% call statement('main') -%} - {{ get_create_view_as_sql(intermediate_relation, sql) }} - {%- endcall %} - {{ adapter.rename_relation(existing_relation, backup_relation) }} - {{ adapter.rename_relation(intermediate_relation, target_relation) }} + {{ log('Relation ' + target_relation.name + ' already exists, replacing it' )}} {% endif %} + {% call statement('main') -%} + {{ get_create_view_as_sql(target_relation, sql) }} + {%- endcall %} + -- cleanup {% set should_revoke = should_revoke(existing_relation, full_refresh_mode=True) %} {% do apply_grants(target_relation, grant_config, should_revoke=should_revoke) %} @@ -58,8 +30,6 @@ {{ adapter.commit() }} - {{ drop_relation_if_exists(backup_relation) }} - {{ run_hooks(post_hooks, inside_transaction=False) }} {{ return({'relations': [target_relation]}) }} @@ -70,20 +40,19 @@ {% macro clickhouse__create_view_as(relation, sql) -%} {%- set sql_header = config.get('sql_header', none) -%} {{ sql_header if sql_header is not none }} - create view {{ relation.include(database=False) }} {{ on_cluster_clause(relation)}} as ( + + create or replace view {{ relation.include(database=False) }} {{ on_cluster_clause(relation)}} {% set contract_config = config.get('contract') %} {% if contract_config.enforced %} {{ get_assert_columns_equivalent(sql) }} {%- endif %} - {% if sql is none %} - {{clickhouse__create_select_query_from_schema()}} - {%- else -%} - {{ sql }} - {%- endif -%} + as ( + {{ sql }} {{ adapter.get_model_query_settings(model) }} ) - {% if model.get('config').get('materialized') == 'view' %} - {{ adapter.get_model_settings(model) }} - {%- endif %} + {% if model.get('config').get('materialized') == 'view' %} + {{ adapter.get_model_settings(model, config.get('engine', default='MergeTree')) }} + {%- endif %} {%- endmacro %} + From 27c227c5e7d3ce04b03ae12bc9ba22380b22e2c6 Mon Sep 17 00:00:00 2001 From: Can Bekleyici Date: Mon, 2 Jun 2025 12:04:18 +0200 Subject: [PATCH 2/2] revert get_model_settings change --- dbt/include/clickhouse/macros/materializations/view.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dbt/include/clickhouse/macros/materializations/view.sql b/dbt/include/clickhouse/macros/materializations/view.sql index 42e51d77..08169b57 100644 --- a/dbt/include/clickhouse/macros/materializations/view.sql +++ b/dbt/include/clickhouse/macros/materializations/view.sql @@ -51,7 +51,7 @@ {{ adapter.get_model_query_settings(model) }} ) {% if model.get('config').get('materialized') == 'view' %} - {{ adapter.get_model_settings(model, config.get('engine', default='MergeTree')) }} + {{ adapter.get_model_settings(model) }} {%- endif %} {%- endmacro %}