Переменные
Описание
В 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)