Перейти к основному содержимому

sql_header

models/<modelname>.sql
{{ config(
sql_header="<sql-statement>"
) }}

select ...


dbt_project.yml
config-version: 2

models:
<resource-path>:
+sql_header: <sql-statement>

Определение

Необязательная конфигурация для вставки SQL выше операторов create table as и create view as, которые dbt выполняет при построении моделей и снимков.

sql_header можно задать с помощью конфигурации или вызовом макроса set_sql_header (пример ниже).

Сравнение с pre-hooks

Pre-hooks также предоставляют возможность выполнить SQL перед созданием модели, как предшествующий запрос. В сравнении, SQL в sql_header выполняется в том же запросе, что и оператор create table|view as.

В результате это делает его более полезным для параметров сессии Snowflake и временных UDF в BigQuery.

Примеры

Установка параметров сессии Snowflake для конкретной модели

Это использует синтаксис блока конфигурации:

models/my_model.sql
{{ config(
sql_header="alter session set timezone = 'Australia/Sydney';"
) }}

select * from {{ ref('other_model') }}

Установка параметров сессии Snowflake для всех моделей

dbt_project.yml
config-version: 2

models:
+sql_header: "alter session set timezone = 'Australia/Sydney';"

Создание временной UDF в BigQuery

Этот пример вызывает макрос set_sql_header. Этот макрос является удобной оберткой, которую вы можете использовать, если у вас есть многострочное SQL-выражение для вставки. В этом случае вам не нужно использовать ключ конфигурации sql_header.

models/my_model.sql
-- Укажите SQL-заголовок:
{% call set_sql_header(config) %}
CREATE TEMPORARY FUNCTION yes_no_to_boolean(answer STRING)
RETURNS BOOLEAN AS (
CASE
WHEN LOWER(answer) = 'yes' THEN True
WHEN LOWER(answer) = 'no' THEN False
ELSE NULL
END
);
{%- endcall %}

-- Укажите код вашей модели:


select yes_no_to_boolean(yes_no) from {{ ref('other_model') }}
0