メインコンテンツまでスキップ
バージョン: 4.x

変数

説明

Dorisでは、変数はシステム変数とユーザ変数に分けられます。どちらも大文字小文字を区別しません。

システム変数はDorisの動作に影響します。システム変数とユーザ変数の両方をユーザクエリで使用できます。

システム変数

システム変数は、データベースの動作とパフォーマンスを制御するためにDorisによって事前定義された変数のセットです。主な特徴は以下の通りです:

  • 変数のタイプ:

    • 読み取り専用変数:これらの変数はシステムによって設定され、ユーザが変更することはできません。例:versioncurrent_timestampなど。

    • 変更可能変数:ユーザは実行時にこれらの変数の値を変更できます。例:exec_mem_limittime_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ですべての変数を表示します。

```sql
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 doris0.0.0--de61c5823 | Doris version doris-0.0--de61c5823 | 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)

グローバルに設定

```sql
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)