Перейти к содержимому
Последнее обновление

Переменные

Описание​

В Doris переменные делятся на системные и пользовательские. Имена переменных обоих типов нечувствительны к регистру.

Системные переменные влияют на поведение Doris. В пользовательских запросах можно использовать как системные, так и пользовательские переменные.

Системные переменные​

Системные переменные — это набор переменных, предопределённых в Doris для управления поведением и производительностью базы данных. Их основные особенности:

  • Типы переменных:

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

    • Изменяемые переменные: пользователи могут изменять их значения во время работы, например exec_mem_limit, time_zone и т. д.

  • Область действия:

    • Глобальные переменные (Global): влияют на все сеансы и задаются с помощью SET GLOBAL.

    • Переменные сеанса (Session): влияют только на текущий сеанс и задаются с помощью SET.

    • Некоторые переменные имеют как глобальную область действия, так и область действия сеанса.

  • Способы доступа:

    • Используйте SHOW VARIABLES для просмотра всех системных переменных.

    • Используйте SHOW VARIABLES LIKE 'pattern' для просмотра переменных, соответствующих шаблону.

    • Значения отдельных переменных сеанса и их влияние описаны в разделе Список переменных сеанса.

  • Сохранение изменений:

    • После перезапуска системы изменения глобальных переменных сбрасываются до значений по умолчанию; перезапуск сеанса не приводит к такому сбросу.

    • Изменения переменных сеанса теряются после завершения сеанса.

Пользовательские переменные​

Пользовательские переменные — это механизм временного хранения данных в пределах сеанса. Их основные особенности:

  • Правила именования:

    • Имя должно начинаться с @.

    • Имена переменных могут содержать буквы, цифры и символы подчёркивания.

    • Регистр символов не учитывается.

  • Область действия:

    • Действуют только в текущем сеансе.

    • Автоматически удаляются после завершения сеанса.

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

  • Способы присваивания:

    • Для присваивания используется синтаксис SET @var_name = value.

    • Поддерживается присваивание результатов вычисления выражений.

  • Типы данных:

    • Могут хранить числа (целые числа и числа с плавающей точкой).

    • Могут хранить строки.

    • Могут хранить значения даты и времени.

    • Могут хранить значения NULL.

    • Тип определяется автоматически при присваивании.

Операторы для определения системных переменных и запроса их значений​

  • SHOW VARIABLES

    Просмотреть переменные можно с помощью SHOW VARIABLES LIKE 'variable_name'.

    SHOW VARIABLES LIKE '%time_zone%';
    +------------------+----------------+----------------+---------+
    | Variable_name | Value | Default_Value | Changed |
    +------------------+----------------+----------------+---------+
    | system_time_zone | Asia/Hong_Kong | Asia/Hong_Kong | 0 |
    | time_zone | Asia/Hong_Kong | Asia/Hong_Kong | 0 |
    +------------------+----------------+----------------+---------+

    Для просмотра всех переменных используйте SHOW VARIABLES.

    SHOW VARIABLES
    +------------------------------------------------------------------+---------------------------------------+---------------------------------------+---------+
    | Variable_name | Value | Default_Value | Changed |
    +------------------------------------------------------------------+---------------------------------------+---------------------------------------+---------+
    | DML_PLAN_RETRY_TIMES | 3 | 3 | 0 |
    | adaptive_pipeline_task_serial_read_on_limit | 10000 | 10000 | 0 |
    | allow_modify_materialized_view | false | false | 0 |
    | allow_partition_column_nullable | true | true | 0 |
    | analyze_timeout | 43200 | 43200 | 0 |
    | version | 5.7.99 | 5.7.99 | 0 |
    | version_comment | Doris version doris-0.0.0--de61c58223 | Doris version doris-0.0.0--de61c58223 | 0 |
    | wait_full_block_schedule_times | 2 | 2 | 0 |
    | wait_timeout | 28800 | 28800 | 0 |
    | workload_group | | | 0 |
    +------------------------------------------------------------------+---------------------------------------+---------------------------------------+---------+
    360 rows in set (0.01 sec)
  • SET

    Некоторые переменные можно задать так, чтобы они действовали глобально или только в текущем сеансе.

    Чтобы значение действовало только в текущем сеансе, используйте SET. Например:

    SET exec_mem_limit = 137438953472;
    SHOW VARIABLES LIKE '%exec_mem_limit%';
    +----------------+--------------+---------------+---------+
    | Variable_name | Value | Default_Value | Changed |
    +----------------+--------------+---------------+---------+
    | exec_mem_limit | 137438953472 | 2147483648 | 1 |
    +----------------+--------------+---------------+---------+
    1 row in set (0.01 sec)
    SET forward_to_master = true;
    SHOW VARIABLES LIKE '%forward_to_master%';
    +-------------------+-------+---------------+---------+
    | Variable_name | Value | Default_Value | Changed |
    +-------------------+-------+---------------+---------+
    | forward_to_master | true | true | 0 |
    +-------------------+-------+---------------+---------+
    1 row in set (0.00 sec)
    SET time_zone = "Asia/Shanghai";
    SHOW VARIABLES LIKE '%time_zone%';
    +------------------+----------------+----------------+---------+
    | Variable_name | Value | Default_Value | Changed |
    +------------------+----------------+----------------+---------+
    | time_zone | Asia/Shanghai | Asia/Hong_Kong | 1 |
    | system_time_zone | Asia/Hong_Kong | Asia/Hong_Kong | 0 |
    +------------------+----------------+----------------+---------+
    2 rows in set (0.00 sec)

    Задание глобального значения

    SET GLOBAL exec_mem_limit = 137438953472;
    SHOW VARIABLES LIKE '%exec_mem_limit%';
    +----------------+--------------+---------------+---------+
    | Variable_name | Value | Default_Value | Changed |
    +----------------+--------------+---------------+---------+
    | exec_mem_limit | 137438953472 | 2147483648 | 1 |
    +----------------+--------------+---------------+---------+
    1 row in set (0.01 sec)
  • UNSET

    Синтаксис:

    UNSET (GLOBAL | SESSION | LOCAL)? VARIABLE (ALL | identifier)
    unset global variable exec_mem_limit;
    SHOW VARIABLES LIKE '%exec_mem_limit%';
    +----------------+------------+---------------+---------+
    | Variable_name | Value | Default_Value | Changed |
    +----------------+------------+---------------+---------+
    | exec_mem_limit | 2147483648 | 2147483648 | 0 |
    +----------------+------------+---------------+---------+
    1 row in set (0.00 sec)

Операторы для определения пользовательских переменных и запроса их значений​

Пользовательские переменные можно определить с помощью следующего оператора:

SET @var_name = constant_value|constant_expr;

Примеры присваивания значений:

SET @v1 = "A";
SET @v2 = 32+33;
SET @v3 = str_to_date("2024-12-29 10:11:12", '%Y-%m-%d %H:%i:%s');

Переменные можно использовать в запросах

SELECT @v1, @v2, @v3;
+------+------+--------------------+
| @v1 | @v2 | @v3 |
+------+------+--------------------+
| A | 65 | 2024-12-29 10:11:12 |
+------+------+--------------------+
1 row in set (0.01 sec)