From c959b7be230984b4651d36a1b58f2d57374585bd Mon Sep 17 00:00:00 2001 From: Mila Page Date: Wed, 28 Aug 2024 23:29:31 -0700 Subject: [PATCH] Better transient handling. --- .../macros/relations/table/create.sql | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/dbt/include/snowflake/macros/relations/table/create.sql b/dbt/include/snowflake/macros/relations/table/create.sql index 12ee13523..d6e3296d4 100644 --- a/dbt/include/snowflake/macros/relations/table/create.sql +++ b/dbt/include/snowflake/macros/relations/table/create.sql @@ -84,22 +84,27 @@ {%- set is_iceberg = _is_iceberg_relation() -%} {%- set is_temporary = temporary -%} - {%- set is_transient = config.get('transient', default=False) -%} - {%- if is_transient and is_iceberg -%} - {{ exceptions.warn("Iceberg format relations cannot be transient. Please remove either the transient or iceberg parameters from %s. If left unmodified, dbt will ignore 'transient'." % this) }} - {%- endif %} + {%- if is_iceberg -%} + {# -- Check if user supplied a transient model config of True. #} + {%- if config.get('transient') == True -%} + {{ exceptions.warn("Iceberg format relations cannot be transient. Please remove either the transient or iceberg parameters from %s. If left unmodified, dbt will ignore 'transient'." % this) }} + {%- endif %} - {%- if is_temporary and is_iceberg -%} - {{ exceptions.warn("Iceberg format relations cannot be temporary. Please remove either the transient or iceberg parameters from %s. If left unmodified, dbt will ignore 'transient'." % this) }} - {%- endif %} + {# -- Check if runtime is trying to create a Temporary Iceberg table. #} + {%- if is_temporary -%} + {{ exceptions.raise_compiler_error("Iceberg format relations cannot be temporary. Temporary is being inserted into an Iceberg format table while materializing %s." % this) }} + {%- endif %} - {%- if is_iceberg -%} {{ return('iceberg') }} + {%- elif is_temporary -%} {{ return('temporary') }} - {%- elif is_transient -%} + + {# -- Always supply transient on table create DDL unless user sets transient to false. #} + {%- elif config.get('transient') == None or config.get('transient') == True -%} {{ return('transient') }} + {%- else -%} {{ return('') }} {%- endif -%}