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

PolarDB:ハイブリッドパーティションの作成

最終更新日:Apr 09, 2026

ハイブリッドパーティションテーブルを作成して、異なるストレージエンジンに保存されているデータにアクセスできます。

次の図は、ハイブリッドパーティションの仕組みを示しています。

ハイブリッドパーティションは、テーブルのパーティションを異なるストレージメディアに保存することで、ホットデータとコールドデータを分離します。これにより、ホットデータに対するクエリパフォーマンスや DML 操作に影響を与えることなく、コールドデータのストレージコストを削減できます。

説明

この機能を使用するには、クォータセンター を開き、クォータ ID polardb_mysql_hybrid_partition を使用して クォータ名 を見つけ、[操作] 列の [適用] をクリックします。

前提条件

  • ご利用のクラスターで、PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.34 以降を実行している必要があります。クラスターのバージョンは、バージョン番号の表示で確認できます。

  • 作成するパーティションのデータファイルがすでに OSS に存在し、そのファイル名が次のルールに従っている必要があります。

    • ファイル拡張子とパーティションマーカーは、大文字である必要があります。

    • テーブル名とパーティション名は、データベース内の名前と一致している必要があります。

    たとえば、テーブル t1 のパーティション p1 が CSV エンジンを使用する場合、そのパーティションのデータファイル名は t1#P#p1.CSV となります。

制限事項

  • ハイブリッドパーティションテーブルには、InnoDB ストレージエンジンを使用するパーティションが少なくとも 1 つ含まれている必要があります。

  • サブパーティションを持つハイブリッドパーティションテーブルを作成する場合、第 1 レベルのパーティションのエンジンはテーブルのエンジンと一致する必要があり、かつ、少なくとも 1 つのサブパーティションが InnoDB ストレージエンジンを使用している必要があります。

  • 現在、ハイブリッドパーティションテーブルは RANGE および LIST パーティションタイプのみをサポートしています。

  • ハイブリッドパーティションテーブルの OSS パーティションでは、DML 操作 (INSERTUPDATEDELETELOAD など) はサポートされていません。

  • ハイブリッドパーティションテーブルで ADD および DROP 操作を実行するには、ご利用のクラスターで PolarDB for MySQL 8.0.2、リビジョンバージョン 8.0.2.2.17 以降を実行している必要があります。

パラメーター

ご利用の PolarDB クラスターの パラメーター ページで、次のパラメーターを設定できます。

パラメーター

説明

loose_hybrid_partition_query_mix_engine_enabled

ハイブリッドパーティションテーブルでクエリ対象となるパーティションを制御します。有効な値は次のとおりです。

  • OFF (デフォルト): クエリは InnoDB および X-Engine パーティションのデータのみを返します。

  • ON: クエリは InnoDB、X-Engine、および OSS パーティションのデータを返します。

ハイブリッドパーティションの作成

ハイブリッドパーティションテーブルを作成するには、OSS サーバーが必要です。OSS サーバーがない場合は、次の構文を使用して作成します。

CREATE SERVER oss_server_name
FOREIGN DATA WRAPPER oss
OPTIONS(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');
説明

クラスターのバージョンが PolarDB for MySQL 8.0.2、リビジョンバージョンが 8.0.2.2.6 以降の場合、my_oss_sts_token パラメーターがサポートされます。

次の表にパラメーターを示します。

パラメーター

タイプ

説明

oss_server_name

string

OSS サーバーの名前。

説明

このパラメーターはグローバルであり、一意である必要があります。名前は、大文字と小文字を区別せず、最大 64 文字です。64 文字を超える名前は切り捨てられます。OSS サーバー名は、引用符で囲まれた文字列として指定できます。

my_oss_endpoint

string

OSS リージョンのエンドポイント。

説明

Alibaba Cloud ホストからデータベースにアクセスする場合は、内部エンドポイントを使用してインターネットトラフィックの発生を回避します。内部エンドポイントには通常、「internal」という単語が含まれます。

my_oss_bucket

string

データファイルを含む OSS バケット。このバケットは、事前に OSS に存在している必要があります。

my_oss_access_key_id

string

OSS へのアクセスに使用する AccessKey ID。

my_oss_access_key_secret

string

OSS へのアクセスに使用する AccessKey シークレット。

my_oss_prefix

string

OSS 内のデータファイルのパスプレフィックス。この値は、空にしたり、特殊文字を含めたりすることはできません。

my_oss_sts_token

string

OSS の一時的なアクセス認証情報です。OSS の一時的なアクセス認証情報の取得方法の詳細については、「一時的なアクセス認証情報の取得」をご参照ください。

説明

my_oss_sts_token パラメーターの値にはデフォルトの有効期限があります。my_oss_sts_token の有効期限が切れた場合は、次のコマンドを使用して EXTRA_SERVER_INFO のすべてのパラメーター値をリセットする必要があります。

ALTER SERVER server_name OPTIONS(EXTRA_SERVER_INFO '{"oss_endpoint": "<my_oss_endpoint>",
"oss_bucket": "<my_oss_bucket>", "oss_access_key_id": "<my_oss_access_key_id>",
"oss_access_key_secret": "<my_oss_access_key_secret>", "oss_prefix":"<my_oss_prefix>", "oss_sts_token": "<my_oss_sts_token>"}');

次の例は、ハイブリッドパーティションテーブルの作成方法を示しています。

CREATE TABLE t2(a1 INT, a2 VARCHAR(30), a3 VARCHAR(256))
CONNECTION = "oss_server_name"
PARTITION BY RANGE(a1)
(
   PARTITION p1 values less than (1000) ENGINE = CSV,
   PARTITION p2 values less than (2000) ENGINE = CSV,
   PARTITION p3 values less than (3000) ENGINE = INNODB
);

ハイブリッドパーティションのクエリ

異なるストレージエンジン上のパーティションは、3 つの方法でクエリできます。

  • hybrid_partition_query_mix_engine_enabled パラメーターを ON に設定します。この場合、クエリは InnoDB、X-Engine、および OSS パーティションのデータを返します。例:

    -- t1 はハイブリッドパーティションテーブルです。
    SELECT * FROM t1;
  • hybrid_partition_query_mix_engine_enabled パラメーターを OFF に設定します。この場合、クエリは InnoDB および X-Engine パーティションのデータのみを返します。例:

    -- t1 はハイブリッドパーティションテーブルです。
    SELECT * FROM t1;
  • 特定のパーティションを名前でクエリします。これにより、ストレージエンジンに関係なく、指定されたパーティションからデータが取得されます。例:

    -- t1 はハイブリッドパーティションテーブルで、p1 はクエリ対象のパーティション名です。
    SELECT * FROM t1 partition (p1);