Работа с переменными в проекте

Переменная хранит значение, которое можно использовать при настройке обработки: минимальную сумму, дату начала загрузки, код организации или имя таблицы. Изменив значение переменной, можно выполнить тот же проект с другими параметрами.

Откуда берутся переменные

  • Переменные проекта задаются в редакторе проекта и доступны его нодам.

  • Входные переменные ноды поступают из предыдущих нод через соединение переменных. Например, одну или несколько переменных можно создать в Manage Variables или получить из базы данных.

Создание переменной в одной ноде не делает её переменной всего проекта. Для передачи в следующую ноду соедините выход переменных источника со входом переменных получателя. Если порты скрыты, включите «Показывать VARIABLE порты» в контекстном меню обеих нод.

VAR-01

Manage Variables передаёт min_amount на вход фильтра.

Как создать входную переменную через Manage Variables

Добавьте Manage Variables, создайте запись с именем min_amount, типом INT и значением 1000. В учебном примере Default равен 0, а nullable выключен. Default применяется только вместо null; при значении 1000 порог остаётся равным 1000.

Сохраните настройки и соедините output_variables с input_variables фильтра, SQL- или Python-ноды. В одной Manage Variables можно задать несколько переменных. Если на вход уже пришла переменная с таким именем, её значение на выходе будет заменено; остальные переменные передаются дальше.

Как создать переменную проекта

  1. Откройте список переменных проекта в редакторе.

  2. Нажмите «Добавить».

  3. Укажите имя, тип и значение. Для примера создайте числовую переменную min_amount со значением 1000.

  4. Нажмите «Создать».

Используйте понятные имена: min_amount, date_from, organization_id. Латинские буквы, цифры и подчёркивания удобны для примеров в SQL и Python. Регистр имеет значение: min_amount и Min_Amount — разные имена.

VAR-02

Переменная проекта min_amount: целое число 1000.

Чтобы изменить переменную, нажмите на неё в списке, исправьте значение и нажмите «Применить».

Как обратиться к переменной

Где используется значение

Как его указать

SQL-код

Подстановка Jinja: {{ project_variables.min_amount }} или {{ input_variables.min_amount }}

Filter DataFrame

Выбрать переменную в списке «Переменные» при настройке значения условия

Python-код

Прочитать project_variables["min_amount"] или input_variables["min_amount"]

В SQL и Python указывайте источник явно: project_variables — переменные проекта, input_variables — переменные, переданные на вход ноды. Это особенно полезно, если имена совпадают. В SQL допустима и короткая форма {{ min_amount }}; при совпадении имён входная переменная имеет приоритет над переменной проекта.

Переменные в SQL: подстановка Jinja

В SQL-редакторе, например в Read Query DB V3 или Execute SQL, заключите обращение к переменной в двойные фигурные скобки. DVT подставляет её значение перед выполнением запроса.

Для таблицы sales с числовой колонкой amount:

SELECT id, amount FROM sales WHERE amount >= {{ project_variables.min_amount }}

При значении min_amount = 1000 условие станет amount >= 1000.

Если порог приходит из другой ноды, используйте:

SELECT id, amount FROM sales WHERE amount >= {{ input_variables.min_amount }}

Для строкового значения также укажите переменную непосредственно в позиции значения:

SELECT id, amount FROM sales WHERE region = {{ project_variables.region }}

Если строковая переменная region содержит Москва, DVT сформирует SQL-значение 'Москва'. В этих примерах дополнительные кавычки вокруг {{ ... }} не нужны: DVT оформляет строковое значение и экранирует апострофы. Тип переменной должен соответствовать типу сравниваемой колонки.

Название таблицы и колонок замените на существующие в вашей БД. В Read Query DB V3 также задайте колонку сегментации, например id, если она подходит для вашего источника.

VAR-03

SQL-пример с синтетическими продажами и подстановкой {{ input_variables.min_amount }}.

Переменные в Filter DataFrame

  1. Подключите датафрейм с колонкой amount к Filter DataFrame.

  2. Создайте условие: колонка amount, операция «больше или равно» (>=).

  3. Откройте выбор значения справа от операции.

  4. В разделе «Переменные» выберите min_amount.

  5. Сохраните настройки и выполните ноду.

Не вводите {{ min_amount }} и не записывайте имя как обычный текст. При выборе из списка фильтр использует значение переменной. При пороге 1000 строки с суммой 1000 и выше попадут на выход соответствующих условию строк.

Если переменная поступает из другой ноды, сначала соедините VARIABLE-порты. Если список пуст, проверьте источник переменной и соединение, затем снова откройте настройки фильтра.

VAR-04

Выбор min_amount в разделе «Переменные» редактора фильтра.

Переменные в Python-нодах

В Execute Python и Execute Python Code on DataFrame доступен объект **input_variables** — во множественном числе. Он содержит значения входных переменных. Дописывать .value не нужно.

Два способа прочитать входную переменную:

min_amount = input_variables["min_amount"] # То же самое для имени без пробелов и специальных символов: min_amount = input_variables.min_amount

Для переменной проекта используйте отдельный объект:

min_amount = project_variables["min_amount"]

Обращение через квадратные скобки удобно и для имён с пробелами: input_variables["Минимальная сумма"]. Эти объекты предназначены для чтения; изменение локальной переменной Python не меняет сохранённую переменную проекта.

Пример для обеих Python-нод, если подключён входной датафрейм с колонкой amount и передана входная переменная min_amount:

min_amount = input_variables["min_amount"] df_out = df_in[df_in["amount"] >= min_amount]

Результат нужно присвоить df_out, чтобы передать отобранные строки дальше по пайплайну. Если порог задан на уровне проекта, замените первую строку на min_amount = project_variables["min_amount"].

VAR-05

Execute Python: чтение input_variables.min_amount и результат df_out.

Если значение не подставляется

Ситуация

Что проверить

Переменная не найдена

Имя и регистр, источник переменной, соединение VARIABLE-портов

В Python возникает ошибка при обращении

Используйте input_variables, а для переменных проекта — project_variables; не input_variable

Фильтр сравнивает с текстом имени

Выберите переменную из списка вместо ввода её имени как обычного значения

SQL не выполняется

Проверьте обе пары скобок {{ ... }}, тип значения, имена таблицы и колонок

Получен неожиданный порог

Проверьте одноимённые переменные проекта и входа; в коде укажите источник явно

Если входная переменная вычисляется предыдущей нодой, её значение может стать известно только во время выполнения. Для проверки запустите необходимую цепочку нод и посмотрите полученный результат.