Кросс-языковые переменные

В Tengri реализован специальный синтаксис для единообразного задания переменных в SQL и в Python. Эти переменные задаются на уровне ноутбука, и их можно использовать в любых ячейках независимо от языка.

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

Переменные можно использовать в коде в двух вариантах: в виде строковых значений и в виде "сырых" значений.

Строковые значения

Синтаксис для SQL и Python:

{@ variable_name @}

"Сырые" значения

Синтаксис SQL и Python:

{@ raw variable_name @}

Указание дефолтного значения

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

Синтаксис SQL и Python:

{@ variable_name | default_value @}
{@ raw variable_name | default_value @}

Примеры

Запишем через графический интерфейс в переменную my_var значение my_value.

Выполним код в ячейке типа Python, используя строковые значения:

print({@ my_var @})
my_value

Выполним код в ячейке типа SQL, используя строковые значения:

SELECT {@ my_var @} AS my_column
+-----------+
| my_column |
+-----------+
| my_value  |
+-----------+
variables RU
Пример использования переменных в интерфейсе Tengri

Выполним код в ячейке типа Python, используя "сырые" значения:

print({@ raw my_var @}) # Error expected
NameError: name 'my_value' is not defined
---------------------------------------------------------------------------
NameError                                 Traceback (most recent call last)
Cell In[12], line 1
----> 1 print(my_value)
NameError: name 'my_value' is not defined

Ожидаемо получаем ошибку NameError, так как переменная с именем my_value не была задана.


Зададим эту переменную и выведем ее значение:

{@ raw my_var @} = 2025

print({@ raw my_var @})
2025

Выполним код в ячейке типа SQL, используя "сырые" значения:

SELECT {@ raw my_var @} AS my_column -- Error expected
ERROR: BinderException: Binder Error: Referenced column "my_value" not found in FROM clause!

Ожидаемо получаем ошибку BinderException, так как в запросе есть колонка my_value, но ее нет в таблице, откуда делается SELECT.


Выполним код в ячейке типа SQL, используя "сырые" значения, но так, чтобы "сырое" значение переменной задавало имя колонки:

SELECT 2025 AS {@ raw my_var @}
+----------+
| my_value |
+----------+
| 2025     |
+----------+

Оставим поле для значения переменной пустым и выполним код в ячейке типа SQL:

SELECT {@ my_var | my_default_value @} AS my_column
+------------------+
| my_column        |
+------------------+
| my_default_value |
+------------------+

Использование кросс-языковых переменных возможно в том числе в случае интерполяции строк в Python:

print(f'my_var: {{@ my_var @}}')

print('my_var: {}'.format({@ my_var @}))
my_var: my_value
my_var: my_value