# Конфигурации функций

Полезно знать

Доступно начиная с dbt v1.11 или в [канале релизов v1 Latest](https://docs.getdbt.tech/docs/dbt-versions/dbt-release-tracks.md).

## Доступные конфигурации

### Конфигурации, специфичные для функций

Конфигурации, специфичные для ресурса, применимы только к одному типу ресурса dbt, а не к нескольким типам ресурсов. Вы можете определить эти настройки в файле проекта (`dbt_project.yml`), в файле свойств (`models/properties.yml` для моделей, аналогично для других ресурсов) или внутри файла ресурса, используя макрос `{{ config() }}`.<br />

Следующие конфигурации, специфичные для ресурса, доступны только для Functions:

### YAML-файл проекта

dbt\_project.yml

```yml
functions:
  <resource-path>:
    # Конфигурации, специфичные для функций, задаются в properties YAML файле
    # См. примеры functions/schema.yml ниже
```

### YAML-файл свойств

functions/schema.yml

```yaml

functions:
  - name: [<function-name>]
    config:
type: scalar  # необязательно, по умолчанию scalar. В дальнейшем будут добавлены aggregate | table
      volatility: deterministic | stable | non-deterministic # необязательно
      runtime_version: <string> # обязательно для UDF на Python
      entry_point: <string> # обязательно для UDF на Python
      packages: [<string>] # необязательно, только для UDF на Python
      snowflake:
        quote_args: true | false # необязательно, только для UDF на JavaScript в Snowflake, доступно в версии 1.12+
      # стандартные параметры конфигурации, применимые к функциям
      database: <string>
      schema: <string>
      alias: <string>
      tags: <string> | [<string>]
      meta: {<dictionary>}
```

### Общие конфигурации

Общие конфигурации предоставляют более широкие операционные настройки, применимые к нескольким типам ресурсов. Как и конфигурации, специфичные для ресурсов, они также могут быть заданы в файле проекта, файлах свойств или в файлах, специфичных для ресурсов.

Конфигурации database, schema и alias

Функции поддерживают конфигурации `database`, `schema` и `alias` так же, как и модели. Они определяют, где именно функция будет создана в вашем хранилище данных. Для функций применяется стандартный приоритет конфигураций dbt (более специфичная конфигурация > конфигурация проекта > значения по умолчанию из target-профиля).

### Project YAML file

dbt\_project.yml

```yaml
functions:
  <resource-path>:
    +enabled: true | false
    +tags: <string> | [<string>]
    +database: <string>
    +schema: <string>
    +alias: <string>
    +meta: {<dictionary>}
```

### Properties YAML file

functions/schema.yml

```yaml

functions:
  - name: [<function-name>]
    config:
      enabled: true | false
      tags: <string> | [<string>]
      database: <string>
      schema: <string>
      alias: <string>
      meta: {<dictionary>}
```

## Настройка функций

Функции настраиваются в YAML-файлах — либо в `dbt_project.yml`, либо в индивидуальном properties YAML файле конкретной функции. Тело функции при этом определяется в SQL-файле, расположенном в директории `functions/`.

Конфигурации функций, как и конфигурации моделей, применяются иерархически. Подробнее см. в разделе [наследование конфигураций](https://docs.getdbt.tech/reference/define-configs.md#config-inheritance).

Функции используют те же макросы генерации имён, что и модели: [`generate_database_name`](https://docs.getdbt.tech/docs/build/custom-databases.md), [`generate_schema_name`](https://docs.getdbt.tech/docs/build/custom-schemas.md#how-does-dbt-generate-a-models-schema-name) и [`generate_alias_name`](https://docs.getdbt.tech/docs/build/custom-aliases.md).

### Примеры

#### Применение конфигурации `schema` ко всем функциям

Чтобы применить конфигурацию ко всем функциям, включая функции из любых установленных [пакетов](https://docs.getdbt.tech/docs/build/packages.md), вложите конфигурацию непосредственно под ключ `functions`:

dbt\_project.yml

```yml

functions:
  +schema: udf_schema
```

#### Применение конфигурации `schema` ко всем функциям в вашем проекте

Чтобы применить конфигурацию только к функциям вашего проекта (то есть *исключая* функции из установленных пакетов), укажите [имя проекта](https://docs.getdbt.tech/reference/project-configs/name.md) как часть пути ресурса.

Для проекта с именем `jaffle_shop`:

dbt\_project.yml

```yml

functions:
  jaffle_shop:
    +schema: udf_schema
```

Аналогичным образом можно использовать имя установленного пакета, чтобы настраивать функции в этом пакете.

#### Применение конфигурации `schema` только к одной функции

Чтобы применить конфигурацию только к одной функции в properties файле, укажите её в блоке `config` этой функции:

functions/schema.yml

```yml

functions:
  - name: is_positive_int
    config:
      schema: udf_schema
```

Чтобы применить конфигурацию только к одной функции в `dbt_project.yml`, укажите полный путь ресурса (включая имя проекта и поддиректории). Для проекта с именем `jaffle_shop` и файлом функции `functions/is_positive_int.sql`:

dbt\_project.yml

```yml
functions:
  jaffle_shop:
    is_positive_int:
      +schema: udf_schema
```

## Пример конфигурации функций

Следующий пример показывает, как настроить функции в проекте с именем `jaffle_shop`, в котором есть два файла функций:

* `functions/is_positive_int.sql`
* `functions/marketing/clean_url.sql`

dbt\_project.yml

```yml
name: jaffle_shop
...
functions:
  jaffle_shop:
    +enabled: true
    +schema: udf_schema
    # Эта конфигурация применяется к functions/is_positive_int.sql
    is_positive_int:
      +tags: ['validation']
    marketing:
      +schema: marketing_udfs # это значение будет иметь приоритет
```

functions/schema.yml

```yml

functions:
  - name: is_positive_int
    description: Определяет, представляет ли строка положительное целое число
    config:
      type: scalar
      volatility: deterministic
      database: analytics
      schema: udf_schema
    arguments:
      - name: a_string
        data_type: string
        description: Строка для проверки
    returns:
      data_type: boolean
      description: Возвращает true, если строка представляет положительное целое число
```
