text: 
  {% macro dbt_snowflake_validate_get_incremental_strategy(config) %}
    {#-- Find and validate the incremental strategy #}
    {%- set strategy = config.get("incremental_strategy", default="merge") -%}
  
    {% set invalid_strategy_msg -%}
      Invalid incremental strategy provided: {{ strategy }}
      Expected one of: 'merge', 'delete+insert'
    {%- endset %}
    {% if strategy not in ['merge', 'delete+insert'] %}
      {% do exceptions.raise_compiler_error(invalid_strategy_msg) %}
    {% endif %}
  
    {% do return(strategy) %}
  {% endmacro %}
  
  {% macro dbt_snowflake_get_incremental_sql(strategy, tmp_relation, target_relation, unique_key, dest_columns) %}
    {% if strategy == 'merge' %}
      {% do return(get_merge_sql(target_relation, tmp_relation, unique_key, dest_columns)) %}
    {% elif strategy == 'delete+insert' %}
      {% do return(get_delete_insert_merge_sql(target_relation, tmp_relation, unique_key, dest_columns)) %}
    {% else %}
      {% do exceptions.raise_compiler_error('invalid strategy: ' ~ strategy) %}
    {% endif %}
  {% endmacro %}
  
  {% materialization incremental, adapter='snowflake' -%}
  
    {% set original_query_tag = set_query_tag() %}
  
    {%- set unique_key = config.get('unique_key') -%}
    {%- set full_refresh_mode = (should_full_refresh()) -%}
  
    {% set target_relation = this %}
    {% set existing_relation = load_relation(this) %}
    {% set tmp_relation = make_temp_relation(this) %}
  
    {#-- Validate early so we don't run SQL if the strategy is invalid --#}
    {% set strategy = dbt_snowflake_validate_get_incremental_strategy(config) -%}
  
    -- setup
    {{ run_hooks(pre_hooks, inside_transaction=False) }}
  
    -- `BEGIN` happens here:
    {{ run_hooks(pre_hooks, inside_transaction=True) }}
  
    {% if existing_relation is none %}
      {% set build_sql = create_table_as(False, target_relation, sql) %}
    {% elif existing_relation.is_view %}
      {#-- Can't overwrite a view with a table - we must drop --#}
      {{ log("Dropping relation " ~ target_relation ~ " because it is a view and this model is a table.") }}
      {% do adapter.drop_relation(existing_relation) %}
      {% set build_sql = create_table_as(False, target_relation, sql) %}
    {% elif full_refresh_mode %}
      {% set build_sql = create_table_as(False, target_relation, sql) %}
    {% else %}
      {% do run_query(create_table_as(True, tmp_relation, sql)) %}
      {% do adapter.expand_target_column_types(
             from_relation=tmp_relation,
             to_relation=target_relation) %}
      {% set dest_columns = adapter.get_columns_in_relation(target_relation) %}
      {% set build_sql = dbt_snowflake_get_incremental_sql(strategy, tmp_relation, target_relation, unique_key, dest_columns) %}
    {% endif %}
  
    {%- call statement('main') -%}
      {{ build_sql }}
    {%- endcall -%}
  
    {{ run_hooks(post_hooks, inside_transaction=True) }}
  
    -- `COMMIT` happens here
    {{ adapter.commit() }}
  
    {{ run_hooks(post_hooks, inside_transaction=False) }}
  
    {% set target_relation = target_relation.incorporate(type='table') %}
    {% do persist_docs(target_relation, model) %}
  
    {% do unset_query_tag(original_query_tag) %}
  
    {{ return({'relations': [target_relation]}) }}
  
  {%- endmaterialization %}
  