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

Hologres:ALTER PARTITION TABLE

最終更新日:Nov 19, 2025

このトピックでは、ALTER PARTITION TABLE ステートメントを実行してパーティションテーブルを変更する方法について説明します。

構文

Hologres でパーティションテーブルを変更するには、次のいずれかのステートメントを実行します。
ALTER TABLE [IF EXISTS] table_name RENAME to new_table_name;
ALTER TABLE [IF EXISTS] table_name ATTACH PARTITION new_partition_name FOR VALUES in (<string_literal>);
ALTER TABLE [IF EXISTS] table_name DETACH PARTITION paritition_name;

パラメーター

次の表は、パーティションテーブルの変更に使用する ALTER PARTITION TABLE ステートメントのパラメーターについて説明しています。
パラメーター説明
RENAMEパーティションテーブルの名前を変更する句。
ATTACH PARTITION new_partition_name FOR VALUES in (<string_literal>)テーブルをパーティションとしてパーティションテーブルにアタッチする句。次のルールに注意してください。
  • パーティションテーブルのパーティションポリシーとパーティションキーに基づいてテーブルをアタッチする必要があります。
  • アタッチするテーブルのフィールド数は、パーティションテーブルと同じである必要があります。フィールドのデータ型は一致する必要があります。
  • アタッチするテーブルには、パーティションテーブルの NOT NULL 制約がすべて含まれている必要があります。

    NULL 値を受け入れないリストパーティションをアタッチする場合は、プライマリキーが式でない限り、パーティションキーに NOT NULL 制約を追加します。

DETACH PARTITION partition_name指定したパーティションをパーティションテーブルからデタッチする句。

デタッチされたパーティションはスタンドアロンテーブルとして存在しますが、デタッチ元のテーブルとの関連付けはなくなります。

制限

  • 次のリストと表は、子テーブルが親テーブルにアタッチされるときに適用されるプロパティ設定のルールについて説明しています。
    • 親テーブルと一致している必要があります:子テーブルのプロパティは、親テーブルのプロパティと一致している必要があります。そうでない場合、子テーブルを親テーブルにアタッチするとエラーが報告され、別の子テーブルを作成する必要があります。
    • 親テーブルと一致する必要はありません:子テーブルのプロパティは、親テーブルのプロパティと異なる場合があります。子テーブルのプロパティが明示的に指定されていない場合、子テーブルは親テーブルの対応するプロパティ設定を継承します。子テーブルのプロパティが明示的に指定されている場合、子テーブルのプロパティ設定は保持されます。
    • 親テーブルのインデックス付き列を含める必要があります:子テーブルのインデックス付き列には、親テーブルのインデックス付き列を含める必要があります。親テーブルのインデックス付き列として指定されていない列は、子テーブルに対して明示的に指定できます。
    カテゴリテーブルプロパティ説明CREATE TABLE PARTITION OF ステートメントを実行して作成された子テーブルが、親テーブルからプロパティ設定を継承するかどうか子テーブルが親テーブルにアタッチされるときに適用されるルール親テーブルからデタッチされた子テーブルが、親テーブルからプロパティ設定を継承するかどうか
    テーブルプロパティorientationテーブルのストレージ形式。はい親テーブルと一致している必要がありますはい
    table_groupテーブルが属するテーブルグループ。このプロパティは、テーブルグループのシャード数も指定します。はい親テーブルと一致している必要がありますはい
    time_to_live_in_secondsテーブルの有効期限 (TTL) 期間。はい親テーブルと一致する必要はありません
    • このプロパティが子テーブルに指定されていない場合、子テーブルは親テーブルからプロパティ設定を継承します。
    • このプロパティが子テーブルに指定されている場合、指定されたプロパティ設定は保持されます。
    はい
    インデックスプライマリキーテーブルのプライマリキー。はい親テーブルと一致している必要がありますはい
    distribution keyテーブルの分散キー。はい親テーブルと一致している必要がありますはい
    clustering_keyテーブルのクラスター化インデックス。このプロパティは、テーブルにデータが格納される列と順序を指定します。はい親テーブルと一致している必要がありますはい
    event_time_columnテーブルのセグメントキー。はい親テーブルと一致している必要がありますはい
    bitmap_columnsテーブルのビットマップインデックス。はい親テーブルのインデックス付き列を含める必要がありますはい
    dictionary_encoding_columnsテーブルのフィールドインデックス。はい親テーブルのインデックス付き列を含める必要がありますはい
    binlog_levelバイナリロギングを有効にするかどうかを指定します。はい親テーブルと一致している必要がありますはい
    proxima_vectorsテーブルでベクトル検索を実行するために使用されるインデックス。はい親テーブルのインデックス付き列を含める必要がありますはい
    列制約nullableNOT NULL 制約。はい親テーブルと一致している必要がありますはい
    デフォルト値デフォルト値の制約。はい親テーブルと一致している必要がありますはい
  • アタッチするテーブルのフィールド数は、パーティションテーブルと同じである必要があります。
  • フィールドのデータ型は一致する必要があります。

次のサンプルコードは、ALTER PARTITION TABLE ステートメントを実行してパーティションテーブルを変更する方法の例を示しています。
-- パーティションテーブルの名前を変更します。
alter table holo_test rename to my_holo_test;

-- my_table という名前のテーブルを、holo_table という名前のテーブルのパーティションとしてアタッチします。
alter table holo_table attach partition my_table for values in ('2015');

-- 子パーティションテーブル holo_test を親パーティションテーブル all_test からデタッチし、子パーティションテーブルをスタンドアロンテーブルにします。
alter table all_test detach partition holo_test; 
            
次のサンプルコードは、既存の子パーティションテーブルを置き換える方法の例を示しています。
-- 一時テーブルを作成します。
begin;
drop table if exists "table_20210101_new";
CREATE TABLE "table_20210101_new" (
  "colA" integer NOT NULL,
  "colB" text NOT NULL,
  "colC" numeric(38,10) NOT NULL,
  "ds" text NOT NULL,
  "process_time" timestamptz NOT NULL DEFAULT now()
);
call set_table_property('table_20210101_new', 'orientation','column');
call set_table_property('table_20210101_new', 'distribution_key','"colA"');
call set_table_property('table_20210101_new', 'event_time_column','process_time');
commit;

--- 一時テーブルにデータをインポートします。
insert into "table_20210101_new" select * from ...;

--- 既存の子パーティションテーブルを一時テーブルに置き換えます。
begin;
-- 既存の子パーティションテーブルを親パーティションテーブルからデタッチし、子パーティションテーブルをスタンドアロンテーブルにします。
ALTER TABLE table_parent DETACH PARTITION table_20210101;
-- スタンドアロンテーブルの名前を変更します。
ALTER TABLE table_20210101 RENAME to table_20210101_backup;
-- 一時テーブルを元の子パーティションテーブルと同じ名前に変更します。
ALTER TABLE table_20210101_new RENAME to table_20210101;
-- 新しい子パーティションテーブルを親パーティションテーブルにアタッチします。
ALTER TABLE table_parent ATTACH PARTITION table_20210101 FOR VALUES in ("20210101");
commit;