本記事では、SQLステートメントを使用してテーブルレベルのホットキャッシュポリシー(STORAGE_CACHE_POLICY)を作成する方法について説明します。
- 通常テーブルのホットキャッシュポリシーを作成する。
- インデックステーブルのホットキャッシュポリシーを作成する。
注意点
ホットキャッシュ戦略は、共有ストレージモードでテーブル/インデックス作成時にのみ指定できます。
通常テーブルのホットスポットキャッシュポリシーの作成
テーブル作成時にテーブルレベルのホットスポットキャッシュポリシーを指定するには、CREATE TABLE ステートメントの後にテーブルオプション STORAGE_CACHE_POLICY を追加します。構文は以下のとおりです:
CREATE TABLE table_name (table_definition_list)
STORAGE_CACHE_POLICY (storage_cache_policy_option);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto"}
| timeline_strategy_list
timeline_strategy_list:
BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
関連パラメータの説明
STORAGE_CACHE_POLICYはオプションです。STORAGE_CACHE_POLICYオプションを指定しない場合、テーブル作成時にデフォルトでテナント構成パラメータdefault_storage_cache_policyの値が使用されます。storage_cache_policy_optionでは、異なるプロパティがKey-Value形式で定義されています。各プロパティの意味は以下のとおりです:
GLOBAL = {"hot" | "auto"}:テーブル全体のデータに対するホットキャッシュポリシーを指定します。取り得る値は以下のとおりです:hot:指定したテーブルのすべてのデータがホットデータであることを意味します。キャッシュディスク容量に余裕がある場合、テーブル内のすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定したテーブルのホットデータはシステムが自動的に識別することを意味します。
timeline_strategy_list:タイムライン戦略パラメータのリストを表します。各パラメータは半角カンマで区切られます。ホットキャッシュのタイムライン戦略は、時間を基準にパーティションデータがホットデータかどうかを判断するメカニズムをサポートしており、システムは設定された戦略に基づいて、ローカルキャッシュディスク上のパーティションデータを自動的に調整します。説明
タイムライン:Rangeパーティションで定義されたパーティション範囲の値に基づいてホットデータをキャッシュします。一定の時間条件を満たすと、そのパーティションのデータはホットデータと判断されます。タイムライン戦略を使用する際は、以下の点に注意してください:
- Rangeパーティションテーブルのみサポートされています(Rangeパーティションは1次または2次でも構いません)。期限切れの判断に時間がかかるためですが、ダブルRangeパーティションは、どのRangeパーティションの時間を基準にするかが決まらないため、使用できません。
- タイムラインを使用する場合、パーティション式には列名のみ含めることができ、式の変換はサポートされません。例えば、
PARTITION BY RANGE COLUMNS(expr(col3))は使用できません。 BOUNDARY_COLUMNはパーティションキーでなければなりません。パーティションキーが複数列ある場合、BOUNDARY_COLUMNは最初の列であり、パーティションが期限切れかどうかを判断するために使用されます。
BOUNDARY_COLUMN = column_name:ホットデータを判断する列を指定します。整数型(BIGINTまたはINT型、Unixタイムスタンプ形式)と時刻型(TIMESTAMP、DATE、DATETIMEまたはYEAR型)をサポートします。BOUNDARY_COLUMNの型が整数型の場合、テーブルのパーティション方式はRange/Range Columnsパーティションタイプをサポートします。BOUNDARY_COLUMNの型が時刻型の場合、テーブルのパーティション方式はRange Columnsパーティションタイプのみを使用できます。
BOUNDARY_COLUMN_UNIT = {"s" | "ms"}:パラメータBOUNDARY_COLUMNの時間単位を指定します。このパラメータはBOUNDARY_COLUMNが整数型の場合にのみ設定できます。整数値をタイムスタンプとして使用する場合は、タイムスタンプの単位を指定する必要があります。そうでない場合、誤った時間が解釈される可能性があります。取り得る値は以下のとおりです:パーティション列が
INT型の場合、BOUNDARY_COLUMN_UNITの値はsのみとなります。パーティション列が
BIGINT型の場合、BOUNDARY_COLUMN_UNITの値はsまたはmsとなります。注意
形式がUnixタイムスタンプでない場合、
INT型で表される時間を正しく認識できません。
HOT_RETENTION = intnum retention_time_unit:ホットデータの時間範囲を設定します。intnum:整数を表します。retention_time_unit:時間単位を表します。取り得る値は以下のとおりです:YEAR:年を表します。MONTH:月を表します。WEEK:週を表します。DAY:日を表します。HOUR:時間を表します。MINUTE:分を表します。
例
ホットデータを手動で指定する方法。
CREATE TABLE tbl1 ( col1 INT, col2 INT) STORAGE_CACHE_POLICY (GLOBAL = "hot");タイムライン方式でホットデータを指定する方法。
CREATE TABLE tbl2 ( col1 BIGINT NOT NULL, col2 VARCHAR(50), col3 DATE NOT NULL) STORAGE_CACHE_POLICY ( BOUNDARY_COLUMN = col3, HOT_RETENTION = 1 MONTH) PARTITION BY RANGE COLUMNS(col3) ( PARTITION M202001 VALUES LESS THAN('2020/02/01'), PARTITION M202002 VALUES LESS THAN('2020/03/01'), PARTITION M202003 VALUES LESS THAN('2020/04/01'), PARTITION MMAX VALUES LESS THAN MAXVALUE);
インデックステーブルのホットキャッシュ戦略の作成
インデックスのホットキャッシュ戦略は、以下の方法で指定できます:
- インデックス作成時に、そのインデックスのテーブルレベルのホットキャッシュ戦略を指定します。
- テーブル作成時にインデックスを作成し、そのインデックスのテーブルレベルのホットキャッシュ戦略を指定します。
- 既存のテーブルにインデックスを追加する際に、そのインデックスのテーブルレベルのホットキャッシュ戦略を指定します。
インデックス作成の詳細については、インデックスの作成を参照してください。
インデックス作成時に、インデックスのテーブルレベルホットキャッシュ戦略を指定する
構文は以下のとおりです:
CREATE INDEX index_name ON table_name (column_name)
STORAGE_CACHE_POLICY (storage_cache_policy_option);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto" | "none"}
| timeline_strategy_list
timeline_strategy_list:
BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
テーブル作成時にインデックスを作成し、インデックスのテーブルレベルホットキャッシュ戦略を指定する
構文は以下のとおりです:
CREATE TABLE table_name (
column_name column_definition,
[column_name column_definition,...],
INDEX index_name(column_name) STORAGE_CACHE_POLICY (storage_cache_policy_option)
);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto" | "none"}
| timeline_strategy_list
timeline_strategy_list:
BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
既存のテーブルにインデックスを追加する際に、インデックスのテーブルレベルホットキャッシュ戦略を指定する
構文は以下のとおりです:
ALTER TABLE table_name ADD INDEX index_name(column_name)
STORAGE_CACHE_POLICY (storage_cache_policy_option);
storage_cache_policy_option:
GLOBAL = {"hot" | "auto" | "none"}
| timeline_strategy_list
timeline_strategy_list:
BOUNDARY_COLUMN = column_name
| BOUNDARY_COLUMN_UNIT = {"s" | "ms"}
| HOT_RETENTION = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
関連パラメータの説明
インデックステーブルに対してホットキャッシュポリシーを設定できます:
ローカルインデックスの場合、テーブルレベルの
STORAGE_CACHE_POLICYを指定できます。テーブルレベルのSTORAGE_CACHE_POLICYが指定されていない場合、デフォルトはnoneであり、データテーブルのSTORAGE_CACHE_POLICY設定を使用します。ローカルインデックスパーティションのホットキャッシュポリシーは、データテーブルのパーティションルールに従います。グローバルインデックスの場合、テーブルレベルの
STORAGE_CACHE_POLICYを指定するほかに、インデックステーブルにパーティションがある場合は、インデックステーブルのパーティションレベルのSTORAGE_CACHE_POLICYも指定できます。グローバルインデックスでテーブルレベルのSTORAGE_CACHE_POLICYが指定されていない場合、デフォルトはnoneです。説明
V4.4.1以降のバージョンでは、グローバルインデックスでテーブルレベルの
STORAGE_CACHE_POLICYが指定されていない場合、主表がGlobalポリシーを採用している場合は、デフォルトで主表のSTORAGE_CACHE_POLICYを継承し、主表がタイムラインポリシーを採用している場合は、デフォルトでhotポリシーを採用します。
テーブルレベルの STORAGE_CACHE_POLICY を設定する際、パラメータ storage_cache_policy_option 内の異なるプロパティはKey-Value形式で定義されます。各プロパティの意味は以下のとおりです:
GLOBAL = {"hot" | "auto" | "none"}:インデックスのデータがホットデータかどうかを指定するために使用されます。取り得る値は以下のとおりです:hot:指定されたインデックスをホットストレージとして指定します。キャッシュディスク容量に余裕がある場合、インデックステーブルのすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定されたインデックステーブルのホットデータをシステムが自動的に認識することを指定します。none:デフォルト値で、このインデックスのポリシーが主表のSTORAGE_CACHE_POLICYの値に従うことを示します。
timeline_strategy_list:タイムラインポリシーパラメータのリストを表し、各パラメータは半角カンマで区切られます。ホットキャッシュタイムラインポリシーは、時間を基準にパーティションデータがホットデータかどうかを判断するメカニズムをサポートします。システムは設定されたポリシーに基づいて、ローカルキャッシュディスク上のパーティションデータを自動的に調整します。ローカルインデックスでこのパラメータを使用することは推奨されません。説明
タイムライン:Rangeパーティションで定義されたパーティション範囲の値に基づいてホットデータをキャッシュします。一定の時間条件を満たした場合、そのパーティションのデータはホットデータと判断されます。タイムラインポリシーを使用する場合、以下の点に注意する必要があります:
- Rangeパーティションテーブルのみがサポートされています(Rangeパーティションは1次または2次でも構いません)。期限切れの判断に時間がかかるためですが、ダブルRangeパーティションは、どちらのRangeパーティションの時間を基準にするか判断できないため、使用できません。
- タイムラインを使用する場合、パーティション式には列名のみを含めることができ、式の変換はサポートされません。例えば、
PARTITION BY RANGE COLUMNS(expr(col3))は使用できません。 BOUNDARY_COLUMNはパーティションキーでなければなりません。パーティションキーが複数列ある場合、BOUNDARY_COLUMNは最初の列でなければならず、パーティションが期限切れかどうかを判断するために使用されます。
BOUNDARY_COLUMN = column_name:ホットデータの列を判断するために使用されます。整数型(BIGINTまたはINT型、Unixタイムスタンプ形式)と時刻型(TIMESTAMP、DATE、DATETIMEまたはYEAR型)をサポートします。BOUNDARY_COLUMNの型が整数型の場合、テーブルのパーティション方式は Range/Range Columns パーティションタイプをサポートします。BOUNDARY_COLUMNの型が時刻型の場合、テーブルのパーティション方式は Range Columns パーティションタイプのみを使用できます。
BOUNDARY_COLUMN_UNIT = {"s" | "ms"}:パラメータBOUNDARY_COLUMNの時間単位を指定するために使用されます。このパラメータはBOUNDARY_COLUMNが整数型の場合にのみ設定できます。整数値をタイムスタンプとして使用する場合は、タイムスタンプ単位を指定する必要があります。そうでない場合、誤った時間が解釈される可能性があります。取り得る値は以下のとおりです:- パーティション列が
INT型の場合、BOUNDARY_COLUMN_UNITの値はsのみとなります。 - パーティション列が
BIGINT型の場合、BOUNDARY_COLUMN_UNITの値はsまたはmsとなります。
- パーティション列が
HOT_RETENTION = intnum retention_time_unit:ホットデータの時間範囲を設定するために使用されます。intnum:整数を表します。retention_time_unit:時間単位を表します。取り得る値は以下のとおりです:YEAR:年を表します。MONTH:月を表します。WEEK:週を表します。DAY:日を表します。HOUR:時間を表します。MINUTE:分を表します。
例
インデックス作成時に、インデックスのテーブルレベル
STORAGE_CACHE_POLICYを指定する:テーブル
tbl3を作成します。CREATE TABLE tbl3 (col1 INT, col2 INT, col3 INT);インデックス
idx1_tbl3を作成し、インデックステーブルのデータをホットデータとして指定します。CREATE INDEX idx1_tbl3 ON tbl3 (col1) LOCAL STORAGE_CACHE_POLICY (GLOBAL = "hot");
テーブル作成時にインデックスを作成し、インデックステーブルのデータをホットデータとして指定する。
CREATE TABLE tbl4 (col1 INT, col2 INT, INDEX idx2 ((col1 + 1)) STORAGE_CACHE_POLICY (GLOBAL = "hot"), UNIQUE KEY ((col1 + col2)));既存のテーブルにインデックスを追加する際、インデックステーブルのデータをホットデータとして指定する。
ALTER TABLE tbl4 ADD INDEX idx3(col1, col2) GLOBAL STORAGE_CACHE_POLICY (GLOBAL = "hot");