volatility
functions:
- name: <function name>
config:
volatility: deterministic | stable | non-deterministic
Определение
Вы можете опционально использовать настройку volatility для SQL‑ или Python‑UDF, чтобы описать, насколько предсказуемым является результат работы функции, используя значения deterministic, stable или non-deterministic. Хранилища данных используют эту информацию, чтобы определить, можно ли кэшировать результаты, менять порядок выполнения или встраивать вызовы функций. Указание корректного значения volatility помогает предотвратить некорректные результаты в случаях, когда функцию небезопасно кэшировать или переупорядочивать.
Например:
- Функция, которая возвращает случайное число (
random()), должна быть настроена какnon-deterministic, поскольку её результат меняется при каждом вызове. - Функция, которая возвращает текущую дату (
current_date()), являетсяstable: её значение остаётся неизменным в рамках одного выполнения запроса, но может изменяться между запросами. Если бы она была настроена какdeterministic, хранилище данных могло бы ошибочно закэшировать значение и повторно использовать его в последующие дни.
По умолчанию dbt не указывает значение volatility. Если вы не задаёте volatility, dbt генерирует оператор CREATE без ключевого слова volatility, и применяется поведение хранилища данных по умолчанию — за исключением Redshift.
В Redshift dbt по умолчанию устанавливает non-deterministic (VOLATILE), если volatility не указана, потому что Redshift требует явного указания volatility, а VOLATILE является самым безопасным предположением.
Поддерживаемые типы volatility
В dbt для конфигурации volatility можно использовать следующие значения:
| Loading table... |
Пример
В этом примере используется volatility deterministic для функции is_positive_int:
functions:
- name: is_positive_int
description: Check whether a string is a positive integer
config:
volatility: deterministic # Optional: stable | non-deterministic | deterministic
arguments:
- name: a_string
data_type: string
returns:
data_type: boolean