メインコンテンツまでスキップ
に最終更新

変数

概要​

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)