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

PolarDB:パーティションの削除

最終更新日:Jun 05, 2024

使用上の注意

  • レベル1のパーティションを削除するには、Alibaba Cloud PolarDB for Xscale (PolarDB-X) インスタンスのバージョンが5.4.14-16539836以降である必要があります。

  • レベル2パーティションを削除するには、PolarDB-Xインスタンスのバージョンが5.4.17-16952556以降である必要があります。

  • HASH、KEY、またはCO_HASHのパーティション分割方法を使用してパーティション分割されたテーブルのパーティションを削除することはできません。

  • RANGEまたはRANGE COLUMNSパーティション分割メソッドを使用してパーティション分割され、catch-allパーティションMAXVALUEを含むテーブルのパーティションを削除することはできません。

  • LISTまたはLIST COLUMNSパーティション分割メソッドを使用してパーティション分割され、catch-allパーティションDEFAULTを含むテーブルのパーティションを削除することはできません。

  • グローバルインデックステーブルのパーティションは削除できません。

  • グローバルインデックスを含むパーティションテーブルのパーティションは削除できません。

  • 同じテーブルグループ内のテーブルのパーティションを削除できるのは、テーブルグループにGSI (global secondary index) テーブルまたはGSIを含むパーティションテーブルが含まれていない場合のみです。

用語

  • テーブルグループ: 同一のパーティションキー列を共有する論理テーブルまたはグローバルインデックステーブルのコレクション。

  • グローバルインデックス: パーティションテーブルのインデックス作成手法。 非パーティションキーを使用して、パーティションテーブルにグローバルインデックスを作成できます。 グローバルインデックスは、一意の制約を提供できます。

構文

ALTER alter_target_definition drop_partition_operation_definition

alter_target_definition:
TABLE [db_name.]tbl_name
 | TABLEGROUP tg_name
 | TABLEGROUP BY TABLE [db_name.]tbl_name

drop_partition_operation_definition:
DROP PARTITION part_name
 | DROP SUBPARTITION subpart_name 

シナリオ1: レベル2パーティションを含まないレベル1パーティションの削除

この例では、r_t1およびr_t2テーブルは、RANGE分割方法を使用して分割される。 次のSQL文を実行して、テーブルを作成できます。

CREATE TABLE 'r_t1' (
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
(
 PARTITION p0の値は (2020) 未満、
 パートp1の値がより少ない (2021)
);

テーブル 'r_t2' の作成 (
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
(
 PARTITION p0の値は (2020) 未満、
 パートp1の値がより少ない (2021)
); 

r_t1テーブルのレベル1パーティション (この例ではp1) を削除します。 次のセクションでは、パーティションの削除に使用されるステートメントについて説明します。

テーブルのパーティションの削除

## テーブル名に基づいてテーブルのパーティションを削除します。
ALTER TABLE r_t1 /* テーブル名 * /
ドロップパーティーp1; 

テーブルグループのパーティションの削除

次のステートメントを実行して、tg1テーブルグループのr_t1テーブルとr_t2テーブルの両方のp1パーティションを削除します。

## テーブルグループ名に基づいてテーブルグループ内のパーティションを削除します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
ドロップパーティーp1;

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを削除します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが削除されます。
ALTER TABLEGROUP BY TABLE r_t1 /* テーブル名 * /
ドロップパーティーp1; 

シナリオ2: レベル2パーティションを含むレベル1パーティションの削除

レベル2パーティションを含むレベル1パーティションを削除すると、レベル1パーティションの下にあるすべてのレベル2パーティションが削除されます。

この例では、r_k_tp_t1およびr_k_tp_t2テーブルは、RANGE分割方法を使用して分割されます。 次のSQL文を実行して、テーブルを作成できます。

CREATE TABLE 'r_k_tp_t1 '(
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
キーによるサブパート ('a') サブパート2
(
 PARTITION p0の値は (2020) 未満、
 パートp1の値がより少ない (2021)
);

CREATE TABLE 'r_k_tp_t2 '(
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
レンジによるパーティー (年 ('c'))
(
 PARTITION p0の値は (2020) 未満、
 パートp1の値がより少ない (2021)
); 

r_k_tp_t1テーブルのレベル1パーティション (この例ではp1) を削除します。 次のセクションでは、パーティションの削除に使用されるステートメントについて説明します。

テーブルのパーティションの削除

## テーブル名に基づいてテーブルのパーティションを削除します。
ALTER TABLE r_k_tp_t1 /* テーブル名 * /
ドロップパーティーp1; 

テーブルグループのパーティションの削除

次のステートメントを実行して、tg1テーブルグループのr_k_tp_t1テーブルとr_k_tp_t2テーブルの両方のp1パーティションを削除します。

## テーブルグループ名に基づいてテーブルグループ内のパーティションを削除します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
ドロップパーティーp1;

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを削除します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが削除されます。
ALTER TABLEGROUP BY TABLE r_k_tp_t1 /* テーブル名 * /
ドロップパーティーp1; 

シナリオ3: テンプレート化されたレベル2パーティションの削除

テンプレート化されたレベル2パーティションを削除すると、すべてのレベル1パーティションの下にある対応するレベル2パーティションが削除されます。

この例では、k_r_tp_t1およびk_r_tp_t2という名前のKEY − RANGE区分テーブルは、テンプレート化レベル2区分を含む。 次のSQL文を実行して、テーブルを作成できます。

CREATE TABLE 'k_r_tp_t1 '(
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
キーによるパーティー ('a') パーティー2
範囲によるサブパーティー (年 ('c'))
(
 SUBPARTITION sp0値は (2020) 未満、
 下位分類sp1の値がより少ない (2021)
);

CREATE TABLE 'k_r_tp_t2 '(
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
キーによるパーティー ('a') パーティー2
範囲によるサブパーティー (年 ('c'))
(
 SUBPARTITION sp0値は (2020) 未満、
 下位分類sp1の値がより少ない (2021)
); 

k_r_tp_t1テーブルのテンプレート化されたRANGEレベル2パーティション (この例ではsp1) を削除します。 次のセクションでは、パーティションの削除に使用されるステートメントについて説明します。

テーブルのパーティションの削除

## テーブル名に基づいてテーブルのパーティションを削除します。
ALTER TABLE k_r_tp_t1 /* テーブル名 * /
ドロップSUBPARTITION sp1; 

テーブルグループのパーティションの削除

次のステートメントを実行して、tg1テーブルグループ内のk_r_tp_t1テーブルとk_r_tp_t2テーブルの両方のsp1レベル2パーティションを削除します。

## テーブルグループ名に基づいてテーブルグループ内のパーティションを削除します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
ドロップSUBPARTITION sp1;

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを削除します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが削除されます。
ALTER TABLEGROUP BY TABLE k_r_tp_t1 /* テーブル名 * /
ドロップSUBPARTITION sp1; 

シナリオ4: テンプレート化されていないレベル2パーティションの削除

単一のレベル1パーティションの下で、テンプレート化されていないレベル2パーティションを個別に削除できます。

この例では、l_r_ntp_t1およびl_r_ntp_t2という名前のLIST − RANGE区分テーブルは、テンプレート化されていないレベル2区分を含む。 次のSQL文を実行して、テーブルを作成できます。

CREATE TABLE 'l_r_ntp_t1 '(
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
リストによるパーティー ('a')
範囲によるサブパーティー (年 ('c'))
(
 PARTITION p0の値 (2020,2022) (
 	SUBPARTITION p0sp0値は (2020) 未満、
 	下位分類p0sp1の値がより少ない (2022)
),
 パーティションp1の値 (2021,2023) (
 	サブパートp1sp0値は (2021) よりも少なく、
 サブパートp1sp1の値が (2023) 未満、
 下位分類p1sp2の値がより少ない (2025)
)
);

CREATE TABLE 'l_r_ntp_t2 '(
'a' bigint(20) UNSIGNED NOT NULL、'b' bigint (20) UNSIGNED NOT NULL,
'c' datetime NOT NULL,
'd' varchar (16) NOT NULL,
'e' varchar (16) NOT NULL
) エンジン=InnoDBデフォルト料金=utf8mb4
リストによるパーティー ('a')
範囲によるサブパーティー (年 ('c'))
(
 PARTITION p0の値 (2020,2022) (
 	SUBPARTITION p0sp0値は (2020) 未満、
 	下位分類p0sp1の値がより少ない (2022)
),
 パーティションp1の値 (2021,2023) (
 	サブパートp1sp0値は (2021) よりも少なく、
 サブパートp1sp1の値が (2023) 未満、
 下位分類p1sp2の値がより少ない (2025)
)
); 

l_r_ntp_t1テーブルのレベル1パーティションp1の下にあるテンプレート化されていないRANGEレベル2パーティション (この例ではp1sp2) を削除します。 次のセクションでは、パーティションの削除に使用されるステートメントについて説明します。

テーブルのパーティションの削除

## テーブル名と、削除するレベル2パーティションの名前に基づいて、テーブルのパーティションを削除します。
ALTER TABLE l_r_ntp_t1 /* テーブル名 * /
ドロップSUBPARTITION p1sp2; 

テーブルグループのパーティションの削除

次のステートメントを実行して、tg1テーブルグループのl_r_ntp_t1テーブルとl_r_ntp_t2テーブルの両方のp1sp2レベル2パーティションを削除します。

## テーブルグループ名に基づいてテーブルグループ内のパーティションを削除します。
ALTER TABLEGROUP tg1 /* テーブルグループ名 * /
ドロップSUBPARTITION p1sp2;

## テーブル名に基づいて、同じテーブルグループ内のテーブルのパーティションを削除します。 指定したテーブル名に基づいてテーブルグループが自動的に見つかり、テーブルグループ内の対応するパーティションが削除されます。
ALTER TABLEGROUP BY l_r_ntp_t1 /* テーブル名 * /
ドロップSUBPARTITION p1sp2;