説明
このステートメントは、データベースに新しいテーブルを作成するために使用します。
構文
CREATE [hint_options] [TEMPORARY] TABLE [IF NOT EXISTS] table_name
(table_definition_list) [table_option_list] [partition_option] [[MERGE_ENGINE = {delete_insert | partial_update}] table_column_group_option] [IGNORE | REPLACE] [AS] select;
CREATE TABLE [TEMPORARY] [IF NOT EXISTS] table_name
LIKE table_name;
table_definition_list:
table_definition [, table_definition ...]
table_definition:
column_definition_list
| [CONSTRAINT [constraint_name]] PRIMARY KEY index_desc
| [CONSTRAINT [constraint_name]] UNIQUE {INDEX | KEY}
[index_name] index_desc
| [CONSTRAINT [constraint_name]] FOREIGN KEY
[index_name] index_desc
REFERENCES reference_definition
[match_action][opt_reference_option_list]
| [FULLTEXT] {INDEX | KEY} [index_name] [index_type] (key_part,...) [WITH PARSER tokenizer_option] [PARSER_PROPERTIES[=](parser_properties_list)]
[index_option_list] [index_column_group_option]
| index_json_clause
| [CONSTRAINT [constraint_name]] CHECK(expression) constranit_state
column_definition_list:
column_definition [, column_definition ...]
column_definition:
column_name data_type
[DEFAULT const_value] [AUTO_INCREMENT]
[NULL | NOT NULL] [[PRIMARY] KEY] [UNIQUE [KEY]] [COMMENT string_value] [SKIP_INDEX(skip_index_option_list)]
| column_name data_type
[GENERATED ALWAYS] AS (expr) [VIRTUAL | STORED]
[opt_generated_column_attribute]
skip_index_option_list:
skip_index_option [,skip_index_option ...]
skip_index_option:
MIN_MAX
| SUM
index_desc:
(column_desc_list) [index_type] [index_option_list]
match_action:
MATCH {SIMPLE | FULL | PARTIAL}
opt_reference_option_list:
reference_option [,reference_option ...]
reference_option:
ON {DELETE | UPDATE} {RESTRICT | CASCADE | SET NULL | NO ACTION | SET DEFAULT}
tokenizer_option:
SPACE
| NGRAM
| BENG
| IK
| NGRAM2
parser_properties_list:
parser_properties, [parser_properties]
parser_properties:
min_token_size = int_value
| max_token_size = int_value
| ngram_token_size = int_value
| ik_mode = 'char_value'
| min_ngram_size = int_value
| max_ngram_size = int_value
key_part:
{index_col_name [(length)] | (expr)} [ASC | DESC]
index_type:
USING BTREE
index_option_list:
index_option [ index_option ...]
index_option:
[GLOBAL | LOCAL]
| block_size
| compression
| STORING(column_name_list)
| COMMENT string_value
| STORAGE_CACHE_POLICY(storage_cache_policy_option)
table_option_list:
table_option [ table_option ...]
table_option:
[DEFAULT] {CHARSET | CHARACTER SET} [=] charset_name
| [DEFAULT] COLLATE [=] collation_name
| table_tablegroup
| block_size
| lob_inrow_threshold [=] num
| compression
| AUTO_INCREMENT [=] INT_VALUE
| COMMENT string_value
| ROW_FORMAT [=] REDUNDANT|COMPACT|DYNAMIC|COMPRESSED|DEFAULT
| PCTFREE [=] num
| parallel_clause
| DUPLICATE_SCOPE [=] 'none|cluster'
| TABLE_MODE [=] 'table_mode_value'
| auto_increment_cache_size [=] INT_VALUE
| READ {ONLY | WRITE}
| ORGANIZATION [=] {INDEX | HEAP}
| enable_macro_block_bloom_filter [=] {True | False}
| DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list)
| SEMISTRUCT_ENCODING_TYPE [=] 'encoding' # V4.4.1以降のバージョンでは廃止され、SEMISTRUCT_PROPERTIESに置き換えられました。
| MICRO_BLOCK_FORMAT_VERSION [=] {1|2}
| STORAGE_CACHE_POLICY (storage_cache_policy_option)
parallel_clause:
{NOPARALLEL | PARALLEL integer}
table_mode_value:
NORMAL
| QUEUING
| MODERATE
| SUPER
| EXTREME
dynamic_partition_policy_list:
dynamic_partition_policy_option [, dynamic_partition_policy_option ...]
dynamic_partition_policy_option:
ENABLE = {true | false}
| TIME_UNIT = {'hour' | 'day' | 'week' | 'month' | 'year'}
| PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
| EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
| TIME_ZONE = {'default' | 'time_zone'}
| BIGINT_PRECISION = {'none' | 'us' | 'ms' | 's'}
partition_option:
PARTITION BY HASH(expression)
[subpartition_option] PARTITIONS partition_count
| PARTITION BY KEY([column_name_list])
[subpartition_option] PARTITIONS partition_count
| PARTITION BY RANGE {(expression) | COLUMNS (column_name_list)}
[subpartition_option] (range_partition_list) [STORAGE_CACHE_POLICY = {"hot" | "auto" | "none"}]
| PARTITION BY LIST {(expression) | COLUMNS (column_name_list)}
[subpartition_option] PARTITIONS partition_count
| PARTITION BY RANGE [COLUMNS]([column_name_list]) [SIZE('size_value')] (range_partition_list)
subpartition_option:
SUBPARTITION BY HASH(expression)
SUBPARTITIONS subpartition_count
| SUBPARTITION BY KEY(column_name_list)
SUBPARTITIONS subpartition_count
| SUBPARTITION BY RANGE {(expression) | COLUMNS (column_name_list)}
(range_subpartition_list) [STORAGE_CACHE_POLICY = {"hot" | "auto" | "none"}]
| SUBPARTITION BY LIST(expression)
storage_cache_policy_option:
GLOBAL = {"hot" | "auto" | "none"}
| timeline_strategy_list
timeline_strategy_list:
BOUNDARY_COLUMN = column_name [,BOUNDARY_COLUMN_UNIT = {"s"| "ms"}] ,HOT_RETENTON = intnum retention_time_unit
retention_time_unit:
YEAR
| MONTH
| WEEK
| DAY
| HOUR
| MINUTE
range_partition_list:
range_partition [, range_partition ...]
range_partition:
PARTITION partition_name
VALUES LESS THAN {(expression_list) | MAXVALUE}
[STORAGE_CACHE_POLICY = {"hot" | "auto" | "none"}]
range_subpartition_list:
range_subpartition [, range_subpartition ...]
range_subpartition:
SUBPARTITION subpartition_name
VALUES LESS THAN {(expression_list) | MAXVALUE}
[STORAGE_CACHE_POLICY = {"hot" | "auto" | "none"}]
expression_list:
expression [, expression ...]
column_name_list:
column_name [, column_name ...]
partition_name_list:
partition_name [, partition_name ...]
partition_count | subpartition_count:
INT_VALUE
table_column_group_option/index_column_group_option:
WITH COLUMN GROUP(all columns)
| WITH COLUMN GROUP(each column)
| WITH COLUMN GROUP(all columns, each column)
index_json_clause:
[UNIQUE] INDEX idx_json_name((CAST(json_column_name->'$.json_field_name' AS UNSIGNED ARRAY)))
| INDEX idx_json_name(column_name, [column_name, ...] (CAST(json_column_name->'$.json_field_name' AS CHAR(n) ARRAY)))
パラメータ説明
パラメータ |
説明 |
|---|---|
| hint_options | オプションです。Hintオプションを指定します。APPEND、DIRECT、NO_DIRECTを含むダイレクトロードHintを手動で指定できます。対応するHintの形式は/*+ [APPEND | DIRECT(need_sort,max_error,load_type)] parallel(N) |NO_DIRECT */です。CREATE TABLE AS SELECTステートメントによるデータのダイレクトロードの詳細については、フルダイレクトロードのCREATE TABLE AS SELECTステートメントを使用したデータのダイレクトロードセクションを参照してください。 |
| TEMPORARY | オプションです。このテーブルを一時テーブルとして作成することを示します。
説明OceanBaseデータベースV4.4.xでは、このパラメータはV4.4.2バージョンからサポートされています。 |
| IF NOT EXISTS | IF NOT EXISTSを指定した場合、作成しようとするテーブルが既に存在してもエラーは報告されません。指定せずに既存のテーブルが存在する場合、システムはエラーを報告します。 |
| IGNORE | REPLACE | オプションです。CREATE TABLE ... SELECTステートメントを使用する際に、重複する一意キー値を持つ行の処理方法を指示します。重複する一意キー値を持つ行が存在する場合、IGNOREまたはREPLACEを指定しないとエラーが発生します。
|
| PRIMARY KEY | 作成するテーブルに主キーを指定します。指定しない場合、隠れた主キーが使用されます。OceanBaseデータベースは、テーブルの主キーの変更やALTER TABLEステートメントを使用したテーブルへの主キーの追加をサポートしています。ALTER TABLEを参照してください。 |
| FOREIGN KEY | 作成するテーブルに外部キーを指定します。外部キー名を指定しない場合、テーブル名 + OBFK + 作成日時が使用されます(例:2021年8月1日00:00:00にt1テーブルに作成された外部キー名はt1_OBFK_1627747200000000)。外部キーはテーブル間で関連データを相互参照することを可能にします。UPDATEまたはDELETE操作が子テーブルとマッチする行を持つ親テーブルのキー値に影響を与える場合、その結果はON UPDATEおよびON DELETE句の参照操作によって決定されます:
SET DEFAULT操作もサポートされています。 |
| FULLTEXT | オプションです。全文インデックスの作成を指定します。全文インデックスの作成に関する詳細は、インデックスの作成の全文インデックスの作成セクションを参照してください。
注意現在のバージョンでは、ローカル全文インデックスの作成のみがサポートされています。 |
| WITH PARSER tokenizer_option | オプションです。全文インデックスのトークナイザーを指定します。詳細については、後述の tokenizer_option を参照してください。 |
| PARSER_PROPERTIES[=](parser_properties_list) | オプションです。トークナイザーのプロパティを指定します。詳細については、後述の parser_properties を参照してください。 |
| KEY | INDEX | 作成するテーブルにキーまたはインデックスを指定します。インデックス名を指定しない場合、インデックスが参照する最初の列をインデックス名として使用します。名前が重複する場合、アンダースコア(_)+ 番号の形式で命名されます(例:c1 列を使用して作成したインデックスが重複する場合、インデックスは c1_2 と命名されます)。SHOW INDEX ステートメントを使用して、テーブル上のインデックスを確認できます。 |
| key_part | (関数)インデックスを作成します。 |
| index_col_name | インデックスの列名を指定します。各列名の後には ASC(昇順)をサポートしますが、DESC(降順)はサポートしません。デフォルトは昇順です。インデックスのソート方式は以下のとおりです:まず index_col_name の最初の列の値でソートします。その列の値が同じレコードは、次の列名の値でソートします。このように順に続けます。 |
| expr | 有効な関数インデックス式を表します。ブール式も許容されます。例:c1=c1。
注意OceanBase データベースの現在のバージョンでは、生成列に対する関数インデックスの作成は禁止されています。 |
| ROW_FORMAT | テーブルでEncodingストレージ形式を有効にするかどうかを指定します。
|
| [GENERATED ALWAYS] AS (expr) [VIRTUAL | STORED] | 生成列を作成します。expr は列値を計算するための式です。
|
| BLOCK_SIZE | テーブルのマイクロブロックサイズを指定します。 |
| lob_inrow_threshold | LOB フィールドの INROW 閾値を設定します。ある LOB フィールドのデータサイズがこの閾値を超えると、超過部分は OUTROW としてLOB Metaテーブルに格納されます。デフォルト値は変数 ob_default_lob_inrow_threshold によって制御されます。 |
| COMPRESSION | テーブルの圧縮アルゴリズムを指定します。取り得る値は以下のとおりです:
|
| CHARSET | CHARACTER SET | テーブルの列のデフォルト文字セットを指定します。使用可能な文字セットについては、文字セットを参照してください。 |
| COLLATE | テーブルの列のデフォルト照合順序を指定します。使用可能な照合順序については、照合順序を参照してください。 |
| table_tablegroup | テーブルが属する tablegroup を指定します。 |
| AUTO_INCREMENT | テーブル内の自動インクリメント列の初期値を指定します。OceanBaseデータベースでは、自動インクリメント列をパーティションキーとして使用できます。 |
| COMMENT | コメント。大文字小文字を区別しません。 |
| PCTFREE | マクロブロックの予約領域の割合を指定します。 |
| parallel_clause | テーブルレベルの並列度を指定します:
|
| DUPLICATE_SCOPE | レプリケーションテーブルの属性を指定します。取り得る値は以下のとおりです:
cluster レベルのレプリケーションテーブルのみをサポートしています。 |
| CHECK | 列の値の範囲を制限します。
SHOW CREATE TABLE コマンドを使用するinformation_schema.TABLE_CONSTRAINTS ビューを確認するinformation_schema.CHECK_CONSTRAINTS ビューを確認する |
| constraint_name | 制約名。最大64文字を含めます。
|
| expression | 制約式。
|
| MERGE_ENGINE = {delete_insert | partial_update} | オプションです。テーブルの更新モデルを指定するために使用します。取り得る値は以下のとおりです:
説明パラメータ |
| table_column_group_option/index_column_group_option | テーブルまたはインデックスのカラムストアオプションを指定します。詳細な説明は以下のとおりです:
|
| SKIP_INDEX | 列のSkip Indexプロパティを識別します。 値は以下のとおりです:
注意
|
| index_json_clause | 複数値インデックスを作成するための句を指定します。複数値インデックスの詳細については、インデックスの作成 の複数値インデックスの作成セクションを参照してください。
注意複数値インデックス機能は現在実験段階にあり、システムの安定性に影響を与えないよう、本番環境での使用は推奨されません。 |
| json_column_name | テーブルのJSONデータ型の列名を指定します。 |
| idx_json_name | 作成する複数値インデックスのインデックス名を指定します。 |
| json_field_name | JSON列でインデックスを作成するフィールド名を指定します。 |
| TABLE_MODE | オプションです。メジャーコンパクションのトリガーしきい値とメジャーコンパクション戦略を指定するために使用し、データダンプ後のメジャーコンパクション動作を制御します。詳細な値については、以下の table_mode_value を参照してください。 |
| auto_increment_cache_size | オプションです。キャッシュされる自動インクリメント値の数を設定するために使用します。このパラメータのデフォルト値は0であり、この項目が設定されていないことを意味します。システムはテナントレベルの構成パラメータ(auto_increment_cache_sizeを自動インクリメント列のキャッシュサイズの設定として使用します。 |
| READ {ONLY | WRITE} | テーブルの読み取り/書き込み権限を指定します。詳細は以下のとおりです:
|
| ORGANIZATION [=] {INDEX | HEAP} | テーブル内のデータ行の格納順序、すなわちテーブルの組織モードを指定します。取り得る値は以下のとおりです:
ORGANIZATION オプションを指定しない場合、このオプションの値は構成パラメータ default_table_organization の値と同じになります。 |
| enable_macro_block_bloom_filter [=] {True | False} | マクロブロックレベルのブルームフィルターを永続化するかどうかを指定するために使用されます。取り得る値は以下のとおりです:
|
| DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list) | テーブルの動的パーティション管理属性を指定し、パーティションの自動作成と削除を実現します。dynamic_partition_policy_list は動的パーティションポリシーの構成可能なパラメータリストで、各パラメータは半角カンマで区切られています。詳細については、以下の dynamic_partition_policy_option を参照してください。 |
| PARTITION BY RANGE [COLUMNS]([column_name_list]) [SIZE('size_value')] | 自動パーティションテーブルの作成を指定するために使用されます。詳細については、自動パーティション分割 のテーブル作成時の自動パーティション構文を参照してください。
説明V4.4.2バージョンでは、V4.4.2 BP1バージョン以降、自動パーティション分割のしきい値の下限が128MBから1MBに調整されました。 |
| SEMISTRUCT_ENCODING_TYPE | オプションで、半構造化エンコーディングタイプを指定するために使用されます。詳細は以下のとおりです:
注意V4.4.1バージョン以降、 |
| SEMISTRUCT_PROPERTIES | オプションです。半構造化エンコーディングタイプを指定するために使用します。キーと値のペアで記述します。詳細は以下のとおりです:
機能の使用方法については、半構造化エンコーディングの使用を参照してください。 注意このパラメータはV4.4.1バージョンからサポートされています。 |
| MICRO_BLOCK_FORMAT_VERSION | オプションです。テーブルのマイクロブロックストレージ形式のバージョン番号を指定するために使用します。詳細は以下のとおりです:値の範囲は [1,+∞)
説明このパラメータはV4.4.1バージョンから導入されました。 |
| STORAGE_CACHE_POLICY | オプションです。共有ストレージモードで、テーブル、パーティション、インデックスのホットキャッシュポリシーを指定するために使用します。指定されたデータをオブジェクトストレージからローカルクラウドディスクにキャッシュするかどうかを示します。そうでない場合は、システムが適応的にキャッシュします。詳細については、以下の storage_cache_policy を参照してください。 |
table_mode_value
説明
以下にリストされている TABLE_MODE モードでは、NORMAL モードを除くすべてのモードが QUEUING テーブルを表します。この QUEUING テーブルは最も基本的なテーブルタイプであり、その後にリストされているいくつかのモード(NORMALモードを除く)は、より積極的なメジャーコンパクション戦略の使用を表しています。
NORMAL:デフォルト値で、通常を意味します。このモードでは、データダンプ後にメジャーコンパクションがトリガーされる確率は非常に低いです。QUEUING:このモードでは、データダンプ後にメジャーコンパクションがトリガーされる確率は低いです。MODERATE:適度を意味します。このモードでは、データダンプ後にメジャーコンパクションがトリガーされる確率は中程度です。SUPER:スーパーを意味します。このモードでは、データダンプ後にメジャーコンパクションがトリガーされる確率は高いです。EXTREME:極端を意味します。このモードでは、ダンプ後にメジャーコンパクションがトリガーされる確率は高いです。
メジャーコンパクションの詳細については、アダプティブメジャーコンパクションを参照してください。
tokenizer_option
SPACE:デフォルト値で、スペースによる分かち書きを示します。以下のプロパティを指定できます:プロパティ値の範囲min_token_size [1, 16] max_token_size [10, 84] NGRAM:N-Gram(中国語)に基づく分かち書き方式を示します。以下のプロパティを指定できます:プロパティ値の範囲ngram_token_size [1, 10] NGRAM2:テキストをmin_ngram_size~max_ngram_sizeの範囲の連続する文字列に分割します。以下のプロパティを指定できます:プロパティ値の範囲min_ngram_size [1, 16] max_ngram_size [1, 16] BENG:Beng(基本英語)に基づく分かち書き方式を示します。以下のプロパティを指定できます:プロパティ値の範囲min_token_size [1, 16] max_token_size [10, 84] IK:IK(中国語)に基づく分かち書き方式を示します。現在はutf-8文字セットのみサポートしています。以下のプロパティを指定できます:プロパティ値の範囲ik_mode smartmax_word
parser_properties
min_token_size:最小単語分割長を表します。デフォルト値は3で、取り得る範囲は1から16です。max_token_size:最大単語分割長を表します。デフォルト値は84で、取り得る範囲は10から84です。ngram_token_size:NGRAMの単語分割長を表します。NGRAMタグマーが有効な場合にのみ適用されます。デフォルト値は2で、取り得る範囲は1から10です。ik_mode:IKタグマーの単語分割モードを表します。取り得る値は以下のとおりです:smart:デフォルト値です。辞書内の単語を使用して単語分割の精度を向上させ、辞書内の単語境界を優先的に考慮することで、不必要な拡張を削減できる可能性があります。max_word:辞書で定義された単語は認識されますが、単語分割の最大化された拡張には影響しません。辞書に定義があっても、max_wordモードはテキストをより多くの単語に分割しようと試みます。
min_ngram_size:最小単語分割長を表します。取り得る範囲は[1,16]です。max_ngram_size: 最大単語分割長を表します。取り得る範囲は[1,16]です。
例:
CREATE TABLE tbl1 (col1 VARCHAR(200), col2 TEXT,
FULLTEXT INDEX fidx(col2) WITH PARSER ik PARSER_PROPERTIES=(ik_mode='max_word'));
dynamic_partition_policy_option
ENABLE = {true | false}:オプションです。動的パーティション管理を有効にするかどうかを示します。変更可能です。値は以下のとおりです:true:デフォルト値で、動的パーティション管理を有効にします。false:動的パーティション管理を無効にします。
TIME_UNIT = {'hour' | 'day' | 'week' | 'month' | 'year'}:必須です。パーティションの時間単位、つまり自動的にパーティション境界を作成する間隔を示します。変更不可です。値は以下のとおりです:hour:時間単位でパーティションを分割します。day:日単位でパーティションを分割します。week:週(曜日)単位でパーティションを分割します。month:月単位でパーティションを分割します。year:年単位でパーティションを分割します。
PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}:オプションです。事前に作成する時間を示します。動的パーティション管理を1回スケジュールすると、最大パーティション上界 > now() + precreate_time になるようにパーティションが事前作成されます。変更可能です。値は以下のとおりです:-1:デフォルト値で、パーティションを事前に作成しません。0:現在のパーティションのみを事前に作成します。n {hour | day | week | month | year}:指定した時間幅のパーティションを事前に作成します。例えば、3 hourは3時間以内のパーティションを事前に作成することを意味します。
説明
- 複数のパーティションを事前に作成する必要がある場合、パーティション境界の間隔は
TIME_UNITとなります。 - 最初に事前に作成されるパーティションの境界は、既存の最大パーティション境界を
TIME_UNITで切り上げた値となります。
EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}:オプションです。パーティションの有効期限を示します。動的パーティション管理を1回スケジュールすると、パーティション上界 < now() - expire_time のすべての期限切れパーティションが削除されます。変更可能です。値は以下のとおりです:-1:デフォルト値で、パーティションは永遠に期限切れになりません。0:現在のパーティションを除き、それ以前のすべてのパーティションが期限切れになります。n {hour | day | week | month | year}:パーティションの有効期限を示します。例えば、1 dayはパーティションの有効期限が1日後であることを意味します。
TIME_ZONE = {'default' | 'time_zone'}:オプションです。現在時刻と時刻型(date、datetime、year型)のパーティションキーの大きさを比較する際に依存するタイムゾーン情報を示します。変更不可です。値は以下のとおりです:default:デフォルト値で、タイムゾーンを追加で設定せず、テナントのタイムゾーンを使用します。上記の型以外では、time_zoneフィールドはdefaultである必要があります。time_zone:カスタムのタイムゾーンオフセット値を示します。例えば、+8:00などのタイムゾーンオフセット値です。
BIGINT_PRECISION = {'none'| 'ms' | 's'}:オプションです。bigint型パーティションキーのタイムスタンプ精度を示します。変更不可です。値は以下のとおりです:none:デフォルト値で、精度がないことを示します(パーティションキーがbigint型ではない場合)。ms:ミリ秒精度。s:秒精度。
動的パーティションテーブルの作成に関する詳細は、動的パーティションテーブルの作成を参照してください。
例:
CREATE TABLE tbl2 (col1 INT, col2 DATETIME)
DYNAMIC_PARTITION_POLICY(
ENABLE = true,
TIME_UNIT = 'hour',
PRECREATE_TIME = '3 hour',
EXPIRE_TIME = '1 day',
TIME_ZONE = '+8:00',
BIGINT_PRECISION = 'none')
PARTITION BY RANGE COLUMNS (col2)(
PARTITION P0 VALUES LESS THAN ('2024-11-11 13:30:00')
);
storage_cache_policy
テーブルレベルstorage_cache_policyの作成
STORAGE_CACHE_POLICYはオプションです。STORAGE_CACHE_POLICYオプションを指定しない場合、テーブル作成時にデフォルトでテナント構成パラメータdefault_storage_cache_policyの値が使用されます。storage_cache_policy_optionでは、異なるプロパティがKey-Value形式で定義されています。各プロパティの意味は以下のとおりです:
GLOBAL = {"hot"|"auto"|"none"}:テーブル全体のデータに対するホットキャッシュポリシーを指定します。取り得る値は以下のとおりです:hot:指定したテーブルのすべてのデータがホットデータであることを意味します。キャッシュディスク容量に余裕がある場合、テーブル内のすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定したテーブルのホットデータはシステムが自動的に識別することを意味します。none:このインデックスのポリシーがメインテーブルのSTORAGE_CACHE_POLICYの値に従うことを意味します。注意
noneプロパティはインデックスにのみ使用できます。
timeline_strategy_list:タイムライン戦略パラメータのリストを表します。各パラメータは半角カンマで区切られます。ホットキャッシュのタイムライン戦略は、時間を基準にパーティションデータがホットデータかどうかを判断するメカニズムをサポートしており、システムは設定された戦略に基づいて、ローカルキャッシュディスク上のパーティションデータを自動的に調整します。説明
タイムライン:Rangeパーティションで定義されたパーティション範囲の値に基づいてホットデータをキャッシュします。一定の時間条件を満たすと、そのパーティションのデータはホットデータと判定されます。タイムライン戦略を使用する際には、以下の点に注意する必要があります:
- Rangeパーティションテーブルのみが使用できます(Rangeパーティションはパーティションまたはサブパーティションでも構いません)。期限切れの判断に時間がかかるためですが、ダブル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:分を表します。
パーティションレベルのstorage_cache_policyを作成する
パーティションレベルの STORAGE_CACHE_POLICY はオプションであり、取り得る値は以下のとおりです。
hot:指定されたパーティションのすべてのデータがホットデータであることを示します。キャッシュディスク容量に余裕がある場合、パーティション内のすべてのデータがローカルキャッシュディスクにキャッシュされます。auto:指定されたパーティションのホットデータはシステムが自動的に識別することを示します。none:デフォルト値で、このパーティションのホットキャッシュポリシーが上位レベルのSTORAGE_CACHE_POLICYの値に従うことを示します。
例
データベーステーブルを作成します。
obclient> CREATE TABLE tbl1 (c1 INT PRIMARY KEY, c2 VARCHAR(50)); Query OK, 0 rows affectedインデックス付きのテーブルを作成します。
obclient> CREATE TABLE tbl2 (c1 INT PRIMARY KEY, c2 INT, c3 INT, INDEX i1 (c2)); Query OK, 0 rows affected関数インデックスを持つテーブル
tbl3を作成します。obclient> CREATE TABLE tbl3 (c1 INT, c2 INT, INDEX i1 ((c1+1)), UNIQUE KEY ((c1+c2))); Query OK, 0 rows affected obclient> SHOW CREATE TABLE tbl3; +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tbl3 | CREATE TABLE `tbl3` ( `c1` int(11) DEFAULT NULL, `c2` int(11) DEFAULT NULL, UNIQUE KEY `functional_index` ((`c1` + `c2`)) BLOCK_SIZE 16384 LOCAL, KEY `i1` ((`c1` + 1)) BLOCK_SIZE 16384 LOCAL ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 2 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+Hashパーティションを
8個作成するテーブルを作成します。obclient> CREATE TABLE tbl4 (c1 INT PRIMARY KEY, c2 INT) PARTITION BY HASH(c1) PARTITIONS 8; Query OK, 0 rows affectedパーティションをRangeパーティション、サブパーティションをKeyパーティションに分割するテーブルを作成します。
obclient> CREATE TABLE tbl5 (c1 INT, c2 INT, c3 INT) PARTITION BY RANGE(c1) SUBPARTITION BY KEY(c2, c3) SUBPARTITIONS 5 (PARTITION p0 VALUES LESS THAN(0), PARTITION p1 VALUES LESS THAN(100)); Query OK, 0 rows affected1列を
gbk、もう1列をutf8とするテーブルを作成します。obclient> CREATE TABLE tbl6 (c1 VARCHAR(10), c2 VARCHAR(10) CHARSET GBK COLLATE gbk_bin) DEFAULT CHARSET utf8 COLLATE utf8mb4_general_ci; Query OK, 0 rows affectedEncodingを有効にし、
zstd圧縮を使用します。マクロブロックの保持領域は5%に設定します。obclient> CREATE TABLE tbl7 (c1 INT, c2 INT, c3 VARCHAR(64)) COMPRESSION 'zstd_1.0' ROW_FORMAT DYNAMIC PCTFREE 5; Query OK, 0 rows affectedテーブル
tbl8を作成し、並列度を3に設定します。obclient> CREATE TABLE tbl8(c1 INT PRIMARY KEY, c2 INT) PARALLEL 3; Query OK, 0 rows affected自動インクリメント列をパーティションキーとして使用します。
obclient> CREATE TABLE tbl9(inv_id BIGINT NOT NULL AUTO_INCREMENT,c1 BIGINT, PRIMARY KEY (inv_id) ) PARTITION BY HASH(inv_id) PARTITIONS 8; Query OK, 0 rows affectedテーブル
ref_t2に外部キーを指定し、UPDATE操作が子テーブルと一致する行の親テーブルのキー値に影響を与えた場合にSET NULL操作を実行します。obclient> CREATE TABLE ref_t1(c1 INT PRIMARY KEY, C2 INT); Query OK, 0 rows affected obclient> CREATE TABLE ref_t2(c1 INT PRIMARY KEY, C2 INT,FOREIGN KEY(c2) REFERENCES ref_t1(c1) ON UPDATE SET NULL); Query OK, 0 rows affectedCHECK制約を持つテーブルtbl10を作成し、制約情報を確認します。obclient> CREATE TABLE tbl10 (col1 INT, col2 INT, col3 INT, CONSTRAINT equal_check1 CHECK(col1 = col3 * 2)); Query OK, 0 rows affected obclient> SHOW CREATE TABLE tbl10; +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tbl10 | CREATE TABLE `tbl10` ( `col1` int(11) DEFAULT NULL, `col2` int(11) DEFAULT NULL, `col3` int(11) DEFAULT NULL, CONSTRAINT `equal_check1` CHECK ((`col1` = (`col3` * 2))) ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | +-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in setテーブル
tbl10に基づいてテーブルtbl11を作成し、テーブル情報を確認します。obclient> CREATE TABLE tbl11 LIKE tbl10; Query OK, 0 rows affected obclient> SHOW CREATE TABLE tbl11; +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Table | Create Table | +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | tbl11 | CREATE TABLE `tbl11` ( `col1` int(11) DEFAULT NULL, `col2` int(11) DEFAULT NULL, `col3` int(11) DEFAULT NULL, CONSTRAINT `tbl11_OBCHECK_1650793233327894` CHECK ((`col1` = (`col3` * 2))) ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 | +-------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in setclusterレベルのレプリケーションテーブルdup_t1を作成します。sysテナントにログインし、Unitを作成します。
obclient> CREATE RESOURCE UNIT IF NOT EXISTS 2c5g MAX_CPU 2, MEMORY_SIZE '5G'; Query OK, 0 rows affectedUnit数が2のリソースプールを作成します。
obclient> CREATE RESOURCE POOL tenant_pool UNIT = '2c5g', UNIT_NUM = 2, ZONE_LIST = ('z1', 'z2', 'z3'); Query OK, 0 rows affectedユーザーテナント
obmysqlを作成し、Locality分散を指定します。obclient> CREATE TENANT obmysql resource_pool_list=('tenant_pool'), LOCALITY = "F@z1, F@z2, R@z3", PRIMARY_ZONE = "z1" SET ob_tcp_invited_nodes='%'; Query OK, 0 rows affectedステップ3で作成した
obmysqlユーザーテナントにログインし、レプリケーションテーブルを作成します。obclient> USE test; Database changed obclient> CREATE TABLE dup_t1(c1 INT) DUPLICATE_SCOPE = 'cluster'; Query OK, 0 rows affected(オプション)ブロードキャストログストリーム情報を確認します。レプリケーションテーブルはこのログストリーム上に作成されます。
obclient> SELECT * FROM oceanbase.DBA_OB_LS WHERE FLAG LIKE "%DUPLICATE%"; +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+-----------+ | LS_ID | STATUS | PRIMARY_ZONE | UNIT_GROUP_ID | LS_GROUP_ID | CREATE_SCN | DROP_SCN | SYNC_SCN | READABLE_SCN | FLAG | UNIT_LIST | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+-----------+ | 1003 | NORMAL | z1;z2 | 0 | 0 | 1683267390195713284 | NULL | 1683337744205408139 | 1683337744205408139 | DUPLICATE | | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+-----------+ 1 row in set(オプション)sysテナントでレプリケーションテーブルのレプリカ分散を確認します。
REPLICA_TYPEフィールドがレプリカタイプです。obclient> SELECT * FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TABLE_NAME = "dup_t1"; +-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+------+----------------+----------+----------+--------------+-----------------+ | TENANT_ID | DATABASE_NAME | TABLE_NAME | TABLE_ID | TABLE_TYPE | PARTITION_NAME | SUBPARTITION_NAME | INDEX_NAME | DATA_TABLE_ID | TABLET_ID | LS_ID | ZONE | SVR_IP | SVR_PORT | ROLE | REPLICA_TYPE | DUPLICATE_SCOPE | +-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+------+----------------+----------+----------+--------------+-----------------+ | 1002 | test | dup_t1 | 500002 | USER TABLE | NULL | NULL | NULL | NULL | 200001 | 1003 | z1 | 11.xxx.xxx.xxx | 36125 | LEADER | FULL | CLUSTER | | 1002 | test | dup_t1 | 500002 | USER TABLE | NULL | NULL | NULL | NULL | 200001 | 1003 | z1 | 11.xxx.xxx.xxx | 36124 | FOLLOWER | READONLY | CLUSTER | | 1002 | test | dup_t1 | 500002 | USER TABLE | NULL | NULL | NULL | NULL | 200001 | 1003 | z2 | 11.xxx.xxx.xxx | 36127 | FOLLOWER | FULL | CLUSTER | | 1002 | test | dup_t1 | 500002 | USER TABLE | NULL | NULL | NULL | NULL | 200001 | 1003 | z2 | 11.xxx.xxx.xxx | 36126 | FOLLOWER | READONLY | CLUSTER | | 1002 | test | dup_t1 | 500002 | USER TABLE | NULL | NULL | NULL | NULL | 200001 | 1003 | z3 | 11.xxx.xxx.xxx | 36128 | FOLLOWER | READONLY | CLUSTER | | 1002 | test | dup_t1 | 500002 | USER TABLE | NULL | NULL | NULL | NULL | 200001 | 1003 | z3 | 11.xxx.xxx.xxx | 36129 | FOLLOWER | READONLY | CLUSTER | +-----------+---------------+------------+----------+------------+----------------+-------------------+------------+---------------+-----------+-------+------+----------------+----------+----------+--------------+-----------------+ 6 rows in set通常のテーブルと同じようにレプリケーションテーブルのデータを挿入、読み書きします。読み取りリクエストにおいて、Proxyを使用した場合、リクエストは任意のOBServerノードにルーティングされる可能性があります。OBServerノードに直接接続した場合、ローカルレプリカが読み取り可能であれば、そのOBServerノード上で読み取りリクエストが実行されます。
obclient> INSERT INTO dup_t1 VALUES(1); Query OK, 1 row affected obclient> SELECT * FROM dup_t1; +------+ | c1 | +------+ | 1 | +------+ 1 row in set
カラムストアテーブル
tbl1_cgを作成します。obclient> CREATE TABLE tbl1_cg (col1 INT PRIMARY KEY, col2 VARCHAR(50)) WITH COLUMN GROUP(each column);カラムストアインデックスを持つテーブルを作成します。
obclient> CREATE TABLE tbl2_cg (col1 INT PRIMARY KEY, col2 INT, col3 INT, INDEX i1 (col2) WITH COLUMN GROUP(each column));カラムストアインデックスを持つカラムストアテーブルを作成します。
obclient> CREATE TABLE tbl3_cg (col1 INT PRIMARY KEY, col2 INT, col3 INT, INDEX i1 (col2) WITH COLUMN GROUP(each column)) WITH COLUMN GROUP(each column);テーブル作成時に列のSkip Index属性を指定します。
obclient> CREATE TABLE test_skidx( col1 INT SKIP_INDEX(MIN_MAX, SUM), col2 FLOAT SKIP_INDEX(MIN_MAX), col3 VARCHAR(1024) SKIP_INDEX(MIN_MAX), col4 CHAR(10) );テーブル
tbl1を作成します。これには整数型の列col1があり、この操作に5つの並列度を適用して実行するよう指定します。また、新しいテーブルtbl1のデータ内容はテーブルtbl2のクエリ結果に基づくことを指定します。obclient> CREATE /*+ parallel(5) */ TABLE tbl1 (col1 INT) AS SELECT col1 FROM tbl2;永続化マクロブロックレベルbloom filterを有効にしたテーブル
tbを作成します。obclient> CREATE TABLE tb(c1 INT PRIMARY KEY, c2 INT) enable_macro_block_bloom_filter = True;テーブル
tbl1を作成し、半構造化エンコーディングタイプをencoding、頻度しきい値を90に指定します。obclient> CREATE TABLE tbl1 (col1 INT PRIMARY KEY, col2 INT) SEMISTRUCT_PROPERTIES=(ENCODING_TYPE=ENCODING, FREQ_THRESHOLD=90);テーブル
tbを作成し、新しいフラット行ストレージ形式(バージョン2)を有効にします。obclient> CREATE TABLE tb(c1 INT PRIMARY KEY, c2 INT) micro_block_format_version = 2;
テーブルレベルSTORAGE_CACHE_POLICYの作成
ホットデータを手動で指定します。
CREATE TABLE test_table1 (c1 INT, c2 INT) storage_cache_policy (global = "hot");タイムライン方式でホットデータを指定します。
CREATE TABLE test_part_func_expr ( id INT, event_time DATETIME NOT NULL, data VARCHAR(100)) STORAGE_CACHE_POLICY ( BOUNDARY_COLUMN = event_time, HOT_RETENTION =1 YEAR ) PARTITION BY RANGE COLUMNS(`event_time`) ( PARTITION p_prev3h VALUES LESS THAN ("2018-01-01 00:00:00"), PARTITION p_prev2h VALUES LESS THAN ("2019-01-01 00:00:00"), PARTITION p_prev1h VALUES LESS THAN ("2020-01-01 00:00:00"), PARTITION p_current VALUES LESS THAN ("2021-01-01 00:00:00"), PARTITION p_next1h VALUES LESS THAN ("2022-01-01 00:00:00"), PARTITION p_max VALUES LESS THAN MAXVALUE );
パーティションレベルのSTORAGE_CACHE_POLICYを作成する
パーティションテーブル作成時にパーティションのSTORAGE_CACHE_POLICYを指定します。
CREATE TABLE tbl3 (col1 INT, col2 INT, col3 INT) PARTITION BY RANGE(col1) SUBPARTITION BY KEY(col2, col3) SUBPARTITIONS 5 (PARTITION p0 VALUES LESS THAN(0) STORAGE_CACHE_POLICY = "hot", PARTITION p1 VALUES LESS THAN(100) STORAGE_CACHE_POLICY = "auto" );パーティションテーブル作成時にサブパーティションのSTORAGE_CACHE_POLICYを指定します。
CREATE TABLE tbl4 (col1 INT, col2 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES LESS THAN(2020) STORAGE_CACHE_POLICY = "hot", SUBPARTITION sp1 VALUES LESS THAN(2021)), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES LESS THAN(2020), SUBPARTITION sp3 VALUES LESS THAN(2021) STORAGE_CACHE_POLICY = "hot", SUBPARTITION sp4 VALUES LESS THAN(2022)) );テーブル作成時にインデックスとテーブルのパーティションのSTORAGE_CACHE_POLICYを同時に指定します。
CREATE TABLE tbl5 ( c1 INT, c2 VARCHAR(50), INDEX idx1 (c1) STORAGE_CACHE_POLICY = (GLOBAL = "hot"), INDEX idx2 (c2) STORAGE_CACHE_POLICY = (GLOBAL = "auto") ) PARTITION BY RANGE (c1) (PARTITION p1 VALUES LESS THAN (100) STORAGE_CACHE_POLICY = "hot", PARTITION p2 VALUES LESS THAN (200) STORAGE_CACHE_POLICY = "auto", PARTITION p3 VALUES LESS THAN MAXVALUE STORAGE_CACHE_POLICY = "none");例:
- テーブル
tbl5を作成する際に2つのインデックスを同時に作成し、各インデックスに異なるストレージキャッシュポリシーを指定しています。 - テーブルは
c1列でRANGEパーティション化され、各パーティションに異なるストレージキャッシュポリシーが指定されています。 - インデックスとテーブルのパーティションのSTORAGE_CACHE_POLICYは独立して設定でき、きめ細かいストレージ管理を実現できます。
- テーブル