# type

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

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

functions/\<filename>.yml

```yml
functions:
  - name: function_name
    config:
      type: scalar | aggregate 
```

В будущем мы рассматриваем возможность добавления поддержки типа `table`. Следите за ходом работы и оставляйте свои отзывы в [этом issue](https://github.com/dbt-labs/dbt/issues/11917).

## Определение

Конфигурация `type` определяет тип пользовательской функции (UDF), которую вы создаёте. Этот параметр является необязательным и по умолчанию принимает значение `scalar`, если он не указан.

## Поддерживаемые типы функций

Поддерживаются следующие типы функций:

* [scalar (по умолчанию)](#scalar-default)
* [aggregate](#aggregate)

Поддержка параметра `type` зависит от используемого хранилища данных и языка (SQL или Python):

| Adapter        | scalar SQL | scalar Python | aggregate SQL | aggregate Python |
| -------------- | ---------- | ------------- | ------------- | ---------------- |
| dbt-bigquery   | ✅         | ✅            | ✅            | ❌               |
| dbt-snowflake  | ✅         | ✅            | ❌            | ✅               |
| dbt-databricks | ✅         | ❌            | ❌            | ❌               |
| dbt-postgres   | ✅         | ❌            | ❌            | ❌               |
| dbt-redshift   | ✅         | ❌            | ❌            | ❌               |
| dbt-trino      | ✅         | ❌            | ❌            | ❌               |

### scalar (по умолчанию)

Скалярная функция возвращает одно значение для каждой входной строки. Это наиболее распространённый тип UDF.

**Примеры сценариев использования:**

* Валидация данных (проверка, соответствует ли строка шаблону)
* Преобразование данных (конвертация форматов, очистка строк)
* Пользовательские вычисления (сложные математические операции)

functions/schema.yml

```yml
functions:
  - name: is_positive_int
    description: Determines if a string represents a positive integer
    config:
      type: scalar
    arguments:
      - name: input_string
        data_type: STRING
    returns:
      data_type: BOOLEAN
```

### aggregate

Агрегатные функции работают с несколькими строками и возвращают одно значение — например, суммируют значения или вычисляют среднее для группы. В запросах такие функции используются в операциях `GROUP BY`.

В настоящее время агрегатные функции поддерживаются только для:

* Python-функций в Snowflake
* SQL-функций в BigQuery

**Примеры сценариев использования:**

* Вычисление сумм или средних значений для групп данных (например, общий объём продаж по клиенту)
* Агрегация данных по времени (например, дневные, месячные или годовые итоги)

functions/schema.yml

```yml
functions:
  - name: double_total
    description: Sums values and doubles the result
    config:
      type: aggregate
    arguments:
      - name: values
        data_type: FLOAT
        description: A sequence of numbers to aggregate
    returns:
      data_type: FLOAT
```

## Связанная документация

* [Пользовательские функции](https://docs.getdbt.tech/docs/build/udfs.md)
* [Свойства функций](https://docs.getdbt.tech/reference/function-properties.md)
* [Конфигурации функций](https://docs.getdbt.tech/reference/function-configs.md)
* [volatility](https://docs.getdbt.tech/reference/resource-configs/volatility.md)
* [arguments](https://docs.getdbt.tech/reference/resource-properties/function-arguments.md)
* [returns](https://docs.getdbt.tech/reference/resource-properties/returns.md)
