このトピックでは、リストのデフォルトのハッシュパーティションテーブルを作成および変更する方法について説明します。
背景情報
PolarDBは、同じレベルのリストとハッシュの2つのパーティションタイプをサポートしています。 データは最初にリストパーティションに挿入されます。 リスト分割ルールに準拠していないデータは、デフォルトのパーティションに配置されます。 デフォルトのパーティションに複数のパーティションがある場合、ハッシュルールが使用されます。 リストデフォルトのハッシュ分割テーブルは、リスト値が不均等に分散され、完全に列挙できないシナリオで一般的に使用されます。 次の図に操作を示します。
制限事項
クラスターバージョンは、次のいずれかの要件を満たしています。 クラスターのバージョンを表示する方法については、「エンジンバージョンの照会」をご参照ください。
クラスターはPolarDB for MySQL 8.0.1で、リビジョンバージョンは8.0.1.1.34以降です。
クラスターはPolarDB for MySQL 8.0.2で、リビジョンバージョンは8.0.2.2.1以降です。
1つ以上のデフォルトのパーティションを作成できます。
リストとデフォルトのサブパーティションを組み合わせて作成できます。 ただし、各パーティションは1つのデフォルトサブパーティションのみをサポートします。
デフォルトのパーティションが1つだけ作成される場合、サブパーティションは任意のタイプにできます。
複数のデフォルトパーティションが存在する場合、ハッシュまたはキーサブパーティションのみがサポートされます。
リストのデフォルトハッシュ分割テーブルを作成する
構文
PolarDBは、リストパーティションと1つ以上のデフォルトパーティションをサポートします。 デフォルトパーティションは、リストパーティションにないデータを格納します。 デフォルトパーティションが大きすぎる場合、ハッシュルールに基づいて複数のデフォルトパーティションに分割できます。 次のステートメントを使用して、1つ以上のリストの既定のハッシュ分割テーブルを作成します。
CREATE TABLE [スキーマ] 。 ] table_name
table_definition
リストによるパーティー [コラム] (expr)
SUBPARTITION BY...
(list_partition_definition[, ..., list_partition_definition] 、
default_partition_definition
)
default_partition_definition
は次のとおりです。
PARTITION partition_name DEFAULT [PARTITIONS number]
各パーティションの定義は、サブパーティションを含むこともできる。 リストデフォルトは、次の方法で定義されているサブパーティションでもサポートされています。
SUBPARTITION subpartition_name DEFAULT
Parameters
パラメーター | 説明 |
table_name | テーブルの名前。 |
partition_name |
|
subpartition_name | サブパーティションの名前。 名前はテーブル内で一意である必要があります。 最大1つのDEFAULTサブパーティションがサポートされています。 |
数値 | 既定のパーティションがハッシュルールに基づいて複数の既定のパーティションに分割されている場合の既定のパーティションの数。 numberパラメーターはオプションです。 このパラメーターを指定しない場合、デフォルトのパーティションが作成されます。 |
例
デフォルトのパーティションを作成します。
CREATE TABLE list_default (
a INT,
b INT
)
リストによるパーティー (a)
(PARTITION p0 VALUES IN (1,2、3,4、5) 、
パーティションp1の値 (6,7、8,9、10) 、
PARTITION pdデフォルト);
複数のデフォルトパーティションを作成します。
CREATE TABLE list_default_hash (
a INT,
b INT
)
リストによるパーティー (a)
(PARTITION p0 VALUES IN (1,2、3,4、5) 、
パーティションp1の値 (6,7、8,9、10) 、
PARTITION pdデフォルトPARTITIONS 3);
VARCHAR
データ型を含み、リスト列パーティショニングルールを使用する複数のデフォルトパーティションを作成します。
CREATE TAB_goods
(
国VARCHAR(30) 、
年VARCHAR(60) 、
商品テキスト
) リストコラムによるパーティー (国)
(
パーティションp1の値 (「中国」) 、
パーティションp2の値 (「USA」) 、
パーティーp3の価値観 (「アジア」) 、
パーティーp3の価値 (「シンガポール」) 、
PARTITION p_deft DEFAULT PARTITIONS 5
);
EXPLAINステートメントを実行してパーティションを表示します。
EXPLAIN SELECT * からlist_default_hash;
サンプル結果:
-------------- ------------------- ------------------- --------------------------------------------------------------------------------
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
---- ------------ ------------------- ------------------- ---------------------------------------------------------------------------------
| 1 | SIMPLE | list_default_hash | p0、p1、pd0、pd1、pd2 | ALL | NULL | NULL | NULL | NULL | NULL | 1 | 100.00 | NULL |
---- ------------ ------------------- ------------------- ---------------------------------------------------------------------------------
1行セット (0.04秒)
リストのデフォルトサブパーティションをサポートするリストのデフォルトハッシュパーティションテーブルを作成します。
CREATE TABLEテスト (a int, b int)
範囲によるパーティー (a)
リストによるサブパート (b) (
PARTITION part0値は未満 (10)
(SUBPARTITION sub0 VALUES IN (1,2、3,4、5) 、
SUBPARTITION sub1デフォルト) 、PARTITION part1の値が20未満
(サブパート2値 (1,2、3,4、5) 、
SUBPARTITION sub3デフォルト) 、PARTITION part2値未満 (30)
(サブパート4の値 (1,2、3,4、5) 、
SUBPARTITION sub5デフォルト);
複数のリストのデフォルトハッシュパーティションが含まれている場合、ハッシュまたはキーサブパーティションのみをサポートするリストのデフォルトハッシュパーティションテーブルを作成します。
CREATE TABLE list_default_hash_sub (
a INT,
b INT
)
リストによるパーティー (a)
ハッシュによるサブパート (b) サブパート20
(PARTITION p0 VALUES IN (1,2、3,4、5) 、
パーティションp1の値 (6,7、8,9、10) 、
PARTITION pdデフォルトPARTITIONS 3);
リストのデフォルトハッシュ分割テーブルの変更
List defaultハッシュパーティションは、次のステートメントのみをサポートします。ALTER TABLE ADD PARTITION
,ALTER TABLE DROP PARTITION
,ALTER TABLE再編成パーティー
,ALTER TABLE TRUNCATE PARTITION
,ALTER TABLE EXCHANGE PARTITION
,ALTERテーブル最適化パーティー
,ALTER TABLE REBUILD PARTITION
,ALTER TABLE修理パーティー
,ALTERテーブル分析パーティション
、およびALTER TABLE CHECK PARTITION
.
このトピックでは、ALTER table ADD PARTITION
、ALTER TABLE DROP PARTITION
、およびALTER TABLE REORGANIZE PARTITION
ステートメントを実行して、リストのデフォルトのハッシュパーティションテーブルを変更する方法について説明します。 その他のステートメントの詳細については、「パーティションテーブルの変更」をご参照ください。
ALTER TABLE ADD PARTITION
デフォルトのパーティションを追加
構文
パーティションテーブルにリストパーティションのみが含まれている場合は、
add partition
ステートメントを実行してデフォルトのパーティションを追加し、リストのデフォルトのハッシュパーティションテーブルに切り替えます。ALTER TABLE table_name ADD PARTITION(default_partition_definition)
例
デフォルトのパーティションを追加する:
CREATE TABLE list_tab ( a INT, b INT ) リストによるパーティー (a) (PARTITION p0 VALUES IN (1,2、3,4、5) 、 パーティションp1の値 (6,7、8,9、10) ); ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT);
デフォルトのパーティションを2つ追加:
CREATE TABLE list_tab ( a INT, b INT ) リストによるパーティー (a) (PARTITION p0 VALUES IN (1,2、3,4、5) 、 パーティションp1の値 (6,7、8,9、10) ); ALTER TABLE list_tab ADD PARTITION(PARTITION pd DEFAULT PARTITIONS 2);
リストの参加を追加
PolarDB For MySQL 8.0.2.2.11以降のリストデフォルトハッシュパーティションテーブルの場合、
WITHOUT VALIDATION
をALTER table add PARTITION
ステートメントに追加してリストパーティションを追加できます。新しいパーティションのリスト値が新しいデータであることを確認する必要があります。これは、既定のパーティション内のデータが新しいリストパーティショニングルールを満たしていないことを意味します。 それ以外の場合は、
ALTER TABLE REORGANIZE PARTITION
ステートメントを実行して、データの一部をデフォルトパーティションから分離し、新しいリストパーティションを作成します。構文
ALTER TABLE table_name ADD PARTITION ( list_partition_definition[, ..., list_partition_definition]) 検証なし
例
リストパーティションを追加します。
CREATE TABLE list_default_hash ( a INT, b INT ) リストによるパーティー (a) (PARTITION p0 VALUES IN (1,2、3,4、5) 、 パーティションp1の値 (6,7、8,9、10) 、 PARTITION pd DEFAULT PARTITIONS 3); ALTER TABLE list_default_hash ADD PARTITION ( パーティションp2の値 (11,12、13) ) 検証なし;
上記のステートメントが実行されると、
p2
という名前のリストパーティションがlist_default_hash
テーブルに追加されます。p2
はデータを含まない。説明既定のパーティションのaパラメーターの値が11、12、13でないことを確認する必要があります。 そうしないと、リストパーティションの追加後にこれらのデータがデフォルトパーティションで見つからない場合があります。
ALTER TABLE DROP PARTITION
DROP PARTITION
ステートメントの詳細については、「DROP PARTITION」をご参照ください。
例
DROP PARTITION
ステートメントは、すべての既定のパーティションを一度に削除します。 このステートメントを実行して、一部のデフォルトパーティションのみを削除することはできません。
DROP PARTITION
文を実行して、すべてのパーティションを削除します。
ALTER TABLE list_default_hash DROP PARTITION pd0、pd1、pd2;
クエリOK、影響を受ける0行 (0.33秒)
レコード: 0重複: 0警告: 0
エラーメッセージ
一部のデフォルトパーティションのみを削除すると、エラーが返されます。
ALTER TABLE list_default_hash DROP PARTITION pd0;
次のエラーメッセージが返されます。
エラー8078 (HY000): DROP PARTITIONは、LIST defaultのデフォルトパーティションでは使用できません。ただし、すべてのデフォルトパーティションを一度ドロップする場合を除きます
ALTER TABLE再編成パーティー
REORGANIZE PARTITION
ステートメントの詳細については、「REORGANIZE PARTITION」をご参照ください。
例
REORGANIZE PARTITIONステートメントは、すべてのデフォルトパーティションを一度に変更することに注意してください。 このステートメントを実行して、一部のデフォルトパーティションのみを変更することはできません。
REORGANIZE PARTITION
ステートメントを実行して、既定のパーティションの数を変更できます。ALTER TABLE list_default_hash パーティーの再編成 pd0,pd1 INTO ( PARTITION pdデフォルトPARTITIONS 3);
上記のステートメントが実行された後、デフォルトパーティションの数は2から3に変更されます。
REORGANIZE PARTITION
ステートメントを実行して、リストパーティションをデフォルトパーティションから分割できます。ALTER TABLE list_default_hash パーティーの再編成 pd0,pd1 INTO ( PARTITION p2の値 (20,21) 、 部分pdデフォルト部分2);
上記のステートメントが実行されると、list_default_hashテーブルに
p2
という名前のリストパーティションが追加されます。p2
には、VALUES IN (20,21)
ルールに一致するデフォルトパーティションから分離されたデータが含まれます。REORGANIZE PARTITION
ステートメントを実行して、リストパーティションをデフォルトパーティションにマージできます。ALTER TABLE list_default_hash パーティーの再編成 p2、pd0、pd1 INTO ( 部分pdデフォルト部分2);
上記のステートメントが実行されると、リストパーティション
p2
がデフォルトパーティションにマージされます。REORGANIZE PARTITION
を実行して、デフォルトパーティションからいくつかの値を分割し、リストパーティションに追加できます。ALTER TABLE list_default パーティションの再編成 p2、pd0、pd1 INTO ( パーティションp2の値 (20,21、22,23、24) 、 PARTITION pd DEFAULT PARTITIONS 4);
上記のステートメントが実行されると、
p2
の定義はPARTITION p2 VALUES IN (20,21)
からPARTITION p2 VALUES IN (20,21,22,23,24)
に変わります。 VALUES IN (20,21、22,23、24) ルールに一致するデータは、デフォルトパーティションからp2
に移動されます。