すべてのプロダクト
Search
ドキュメントセンター

PolarDB:リストデフォルトハッシュ

最終更新日:May 24, 2024

このトピックでは、リストのデフォルトのハッシュパーティションテーブルを作成および変更する方法について説明します。

背景情報

PolarDBは、同じレベルのリストとハッシュの2つのパーティションタイプをサポートしています。 データは最初にリストパーティションに挿入されます。 リスト分割ルールに準拠していないデータは、デフォルトのパーティションに配置されます。 デフォルトのパーティションに複数のパーティションがある場合、ハッシュルールが使用されます。 リストデフォルトのハッシュ分割テーブルは、リスト値が不均等に分散され、完全に列挙できないシナリオで一般的に使用されます。 次の図に操作を示します。LIST DEFAULT HASH

制限事項

  • クラスターバージョンは、次のいずれかの要件を満たしています。 クラスターのバージョンを表示する方法については、「エンジンバージョンの照会」をご参照ください。

    • クラスターは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

  • デフォルトのパーティションが1つだけ作成されている場合のパーティションの名前。 名前は、他のパーティションテーブルの名前と異なる必要があります。

  • 複数のデフォルトパーティションが作成された場合のパーティション名のプレフィックス。 この場合、名前は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 PARTITIONALTER 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 VALIDATIONALTER 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に移動されます。

参考資料

リストのデフォルトハッシュ分割を使用する場合