説明
このステートメントは、データベース内に新しいテーブルを作成するために使用されます。
構文
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
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'
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)
| 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)
| SUBPARTITION BY LIST(expression)
range_partition_list:
range_partition [, range_partition ...]
range_partition:
PARTITION partition_name
VALUES LESS THAN {(expression_list) | MAXVALUE}
range_subpartition_list:
range_subpartition [, range_subpartition ...]
range_subpartition:
SUBPARTITION subpartition_name
VALUES LESS THAN {(expression_list) | MAXVALUE}
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オプションを指定します。ダイレクトロードHintの手動指定がサポートされており、APPEND、DIRECT、NO_DIRECTが含まれます。対応するHintフォーマットは /*+ [APPEND | DIRECT(need_sort,max_error,load_type)] parallel(N) |NO_DIRECT */ です。CREATE TABLE AS SELECTステートメントによるデータのダイレクトロードに関する詳細は、フルダイレクトロード のCREATE TABLE AS SELECTステートメントによるデータのダイレクトロードセクションを参照してください。 |
| TEMPORARY | オプションで、このテーブルを一時テーブルとして作成することを示します。
説明このパラメータは、OceanBaseデータベースV4.3.5 BP4バージョンからサポートされています。 |
| 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を参照してください。
説明OceanBaseデータベースV4.3.5では、V4.3.5 BP1バージョンからトークナイザーのプロパティ( |
| KEY | INDEX | 作成するテーブルにキーまたはインデックスを指定します。インデックス名を指定しない場合、インデックス参照の最初の列をインデックス名として使用します。名前が重複する場合は、アンダースコア(_)+ 番号の形式で命名します。(例えば、c1列を使用して作成されたインデックスの名前が重複する場合、インデックス名はc1_2となります。) SHOW INDEXステートメントを使用して、テーブル上のインデックスを確認できます。 |
| key_part | (関数)インデックスを作成します。 |
| index_col_name | インデックスの列名を指定します。各列名の後ろにはASC(昇順)がサポートされており、DESC(降順)はサポートされていません。デフォルトは昇順です。インデックスのソート方式は次のとおりです:まずindex_col_nameの最初の列の値でソートします。その列の値が同じレコードは、次の列名の値でソートします。これを繰り返します。 |
| expr | 有効な関数ベースのインデックス式を表し、ブール式も許可されます。例えば、c1=c1です。
注意OceanBaseデータベースの現在のバージョンでは、生成列上の関数ベースのインデックスの作成は禁止されています。 |
| ROW_FORMAT | テーブルでエンコーディングストレージ形式を有効にするかどうかを指定します。
|
| [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の値と同じになります。
説明OceanBaseデータベースV4.3.5バージョンでは、 |
| enable_macro_block_bloom_filter [=] {True | False} | マクロブロックレベルのbloom filterを永続化するかどうかを指定します。値は以下のとおりです:
説明OceanBaseデータベースV4.3.5バージョンでは、 |
| DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list) | テーブルの動的パーティション管理プロパティを指定し、パーティションの自動作成と削除を実現します。dynamic_partition_policy_list動的パーティションポリシーの構成可能なパラメータリストであり、各パラメータは英語のカンマで区切られています。詳細については、以下のdynamic_partition_policy_optionを参照してください。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP2バージョンからテーブルの動的パーティション管理プロパティを指定することがサポートされています。 |
| PARTITION BY RANGE [COLUMNS]([column_name_list]) [SIZE('size_value')] | 自動パーティションテーブルの作成を指定します。詳細については、自動パーティションの分割のテーブル作成時の自動パーティション構文を参照してください。 |
| SEMISTRUCT_ENCODING_TYPE | オプションで、セミストリクトエンコーディングタイプを指定します。具体的には以下のとおりです:
|
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] 説明
OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP2バージョンから
NGRAM2トークナイザーがサポートされています。BENG:Beng(基本英語)に基づくトークン化方式です。次のプロパティを指定できます:プロパティ 値の範囲 min_token_size [1, 16] max_token_size [10, 84] IK:IK(中国語)に基づくトークン化方式を表します。現在はutf-8文字セットのみサポートしています。次のプロパティを指定できます:プロパティ 値の範囲 ik_mode smartmax_word
説明
OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP1バージョンから
IKトークナイザーがサポートされています。
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}'}:オプション。事前に作成する時間を示します。動的パーティション管理をスケジュールするたびに、パーティションが事前に作成され、最大パーティション上界 > 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}'}:オプション。パーティションの有効期限を示します。動的パーティション管理をスケジュールするたびに、パーティション上界 < 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' | 'us' | 'ms' | 's'}:オプション。bigintタイプのパーティションキーのタイムスタンプ精度を示します。変更不可で、値は以下のとおりです:none:デフォルト値。精度なし(パーティションキーがbigintタイプではない)を示します。us:マイクロ秒の精度。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')
);
例
データベーステーブルを作成します。
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 | +-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ハッシュパーティション数が
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 affectedgbk列と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 affectedエンコーディングを有効にし、
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 affectedユニット番号が2のリソースプールを作成します。
obclient> CREATE RESOURCE POOL tenant_pool UNIT = '2c5g', UNIT_NUM = 2, ZONE_LIST = ('z1', 'z2', 'z3'); Query OK, 0 rows affectedユーザーテナント
obmysqlを作成し、ローカリティ分散を指定します。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 | +-------+--------+--------------+---------------+-------------+---------------------+----------+---------------------+---------------------+-----------+ | 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を作成します。CREATE TABLE tbl1_cg (col1 INT PRIMARY KEY, col2 VARCHAR(50)) WITH COLUMN GROUP(each column);カラムストアインデックス付きのテーブルを作成します。
CREATE TABLE tbl2_cg (col1 INT PRIMARY KEY, col2 INT, col3 INT, INDEX i1 (col2) WITH COLUMN GROUP(each column));カラムストアインデックス付きのカラムストアテーブルを作成します。
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);テーブル作成時にスキップインデックス属性を指定します。
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のクエリ結果から取得されるように指定します。CREATE /*+ parallel(5) */ TABLE tbl1 (col1 INT) AS SELECT col1 FROM tbl2;マクロブロックレベルの永続化されたbloomフィルターを有効にしたテーブル
tbを作成します。CREATE TABLE tb(c1 INT PRIMARY KEY, c2 INT) enable_macro_block_bloom_filter = True;