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

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

最終更新日:Feb 15, 2026

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

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

image

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

説明

ハイブリッドパーティションテーブル機能は、カナリアリリース中です。この機能を使用するには、クォータセンターにアクセスし、[クォータID] polardb_mysql_hybrid_partition のクォータを見つけて、[アクション] 列の [リクエスト] をクリックします。

前提条件

  • ご利用のクラスターは、マイナーエンジンバージョン8.0.2.2.5以降のPolarDB for MySQL 8.0.2を実行している必要があります。クラスターバージョンは、「バージョン番号の確認」をご参照ください。

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

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

    • テーブル名とパーティション名は、データベース内の名前と同じである必要があります。

    たとえば、テーブル t1 のパーティション p1 がCSVストレージエンジンを使用する場合、そのデータファイルは t1#P#p1.CSV という名前である必要があります。

重要な注意事項

  • 各ハイブリッドパーティションテーブルには、InnoDBエンジン上に作成されたパーティションが少なくとも1つ含まれている必要があります。

  • サブパーティションを持つハイブリッドパーティションテーブルを作成する場合、ハッシュパーティションエンジンはテーブルエンジンと一致する必要があります。また、少なくとも1つのサブパーティションがInnoDBエンジン上に作成されている必要があります。

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

  • ハイブリッドパーティションテーブル内のOSSパーティションに対して、INSERTUPDATEDELETE、または LOAD などのDML操作を実行することはできません。

  • PolarDB for MySQL 8.0.2.2.17以降を実行しているクラスターは、ハイブリッドパーティションテーブルに対する ADD および DROP 操作をサポートします。以前のバージョンでは、これらの操作はサポートされていません。

パラメーター

ハイブリッドパーティションテーブルを使用する場合、ご使用の 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>"}');
説明

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

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

パラメーター

タイプ

注記

oss_server_name

String

OSSサーバーの名前。

説明

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

my_oss_endpoint

String

OSSリージョンのドメイン名。

説明

Alibaba Cloud ホストからデータベースにアクセスする場合、インターネットトラフィックを回避するために、内部の同一リージョンエンドポイント (「internal」を含むドメイン名) を使用してください。

my_oss_bucket

String

データファイルが存在するOSSバケット。このバケットはOSSで事前に作成する必要があります。

my_oss_access_key_id

String

OSSアカウントID。

my_oss_access_key_secret

String

OSSアカウントキー。

my_oss_prefix

String

OSSパスプレフィックス。データファイルを保存する場所を指定します。特殊文字を含んだり、空にしたりすることはできません。

my_oss_sts_token

String

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

説明

my_oss_sts_token の値には、デフォルトの生存時間 (TTL) があります。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 is a hybrid partitioned table.
    SELECT * FROM t1;
  • hybrid_partition_query_mix_engine_enabled パラメーターを OFF に設定します。クエリはInnoDBパーティションとX-Engineパーティションからのみデータを返します。例:

    -- t1 is a hybrid partitioned table.
    SELECT * FROM t1;
  • パーティション名を指定します。これにより、任意のタイプのストレージエンジンを使用するパーティションからデータをクエリできます。例:

    -- t1 is a hybrid partitioned table. p1 is the partition name.
    SELECT * FROM t1 PARTITION (p1);