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

AnalyticDB:テーブルのストレージモデルを定義する

最終更新日:Mar 05, 2025

AnalyticDB for PostgreSQL は、行指向ストレージ、列指向ストレージ、ハイブリッド行-列ストレージの 3 つのテーブルストレージモデルをサポートしています。テーブルを作成する際に、ビジネス要件に基づいて適切なストレージモデルを選択できます。行指向ストレージは、データ更新が頻繁に行われる場合や、INSERT 文を実行してリアルタイムで書き込みを行う場合に適しています。列指向ストレージは、少数の列のデータクエリや集計など、データウェアハウスのシナリオに適しています。

テーブルのストレージモデルを指定する

行指向テーブルまたは列指向テーブルを定義する場合、CREATE TABLE 文の WITH 句でストレージモデルを指定できます。WITH 句では、圧縮アルゴリズムと圧縮レベルも指定できます。次の表にパラメーターを示します。

パラメーター

説明

有効な値

orientation

テーブルのストレージモデル。有効な値: row および column。デフォルト値: row

説明

WITH 句を使用してハイブリッド行-列ストレージモデルを指定することはできません。ハイブリッド行-列ストレージを構成する方法については、このトピックの「ハイブリッド行-列ストレージテーブル」セクションを参照してください。

  • row

  • column

compresstype

テーブルの圧縮アルゴリズム。

AnalyticDB for PostgreSQL V4.3 および V6.0 のデフォルト値: none。圧縮アルゴリズムは使用されません。

AnalyticDB for PostgreSQL V7.0 のデフォルト値: auto。データ属性とシステム構成に基づいて、最適な圧縮アルゴリズムが自動的に選択されます。

  • V4.3: zlib、rle_type、none、および auto。

  • V6.0: zstd、zlib、rle_type、lz4、none、および auto。

  • V7.0: zstd、lz4、none、および auto。

compresslevel

テーブルの圧縮レベル。値が大きいほど圧縮率は高くなりますが、圧縮速度は低下します。デフォルト値: 1。

1 ~ 9。値は整数である必要があります。

appendonly

追加最適化ストレージを有効にするかどうかを指定します。デフォルト値: false

  • true

  • false

行指向テーブル

デフォルトでは、AnalyticDB for PostgreSQL は PostgreSQL のヒープストレージモデルを使用して行指向テーブルを作成します。行指向テーブルは、高い頻度で更新する必要があるデータ、または INSERT 文を実行してリアルタイムで書き込むデータに使用されます。B ツリーインデックスを持つ行指向テーブルは、ポイントクエリを実行する際に高いデータ検索パフォーマンスを提供します。

  • ヒープストレージモデルを使用する行指向テーブルを作成します。

    CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);
    説明

    Data Transmission Service (DTS) を使用して AnalyticDB for PostgreSQL インスタンスにデータを書き込む場合、宛先テーブルは行指向テーブルである必要があります。AnalyticDB for PostgreSQL DTS では、ほぼリアルタイムのデータ同期が可能です。INSERT 文で挿入されたデータに加えて、DTS は UPDATE や DELETE などの SQL 文で更新されたデータを同期できます。

  • orientation パラメーターと appendonly パラメーターを使用して、追加最適化行指向 (AORO) テーブルを作成します。

    CREATE TABLE bar (a int, b text) 
    WITH (appendonly=true, orientation=row)
    DISTRIBUTED BY (a);

列指向テーブル

列指向テーブルは、データを列ごとに格納します。データにアクセスするとき、関連する列のみが読み取られます。列指向テーブルは、少数の列のデータクエリや集計など、データウェアハウスのシナリオに適しています。これらのシナリオでは、列指向テーブルは高い I/O パフォーマンスを提供します。ただし、列指向テーブルは、データが頻繁に挿入または更新されるシナリオでは効率が低下します。COPY 文などのバッチロード方法を使用して、列指向テーブルにデータを挿入することをお勧めします。列指向テーブルは、行指向テーブルの 3 ~ 5 倍のデータ圧縮率を提供します。

列指向テーブルは追加最適化テーブルである必要があります。列指向テーブルを作成するには、appendonly パラメーターを true に設定する必要があります。

CREATE TABLE bar (a int, b text) 
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);

ハイブリッド行-列ストレージテーブル

重要

AnalyticDB for PostgreSQL V7.0 インスタンスのみがハイブリッド行-列ストレージテーブルをサポートしています。

パーティションテーブルと非パーティションテーブルは、ハイブリッド行-列ストレージをサポートしています。

非パーティションテーブル

ハイブリッド行-列ストレージを実現するには、非パーティションテーブルのストレージエンジンを beam に設定します。

Beam ストレージエンジンは、行指向の Delta ストレージと PAX ベースの列指向の Base ストレージで構成されています。データが書き込まれるとき、データ書き込み方法に基づいて適切なストレージモデルが選択されます。INSERT INTO VALUES 文などのリアルタイムストリーミング書き込み方法を使用する場合、データは行指向の Delta ストレージに書き込まれ、行指向テーブルに匹敵するリアルタイム書き込みパフォーマンスを実現します。COPY 文または INSERT INTO SELECT 文などのバッチ処理方法を使用する場合、データは列指向の Base ストレージに書き込まれ、より高いスループットと書き込みパフォーマンスを実現します。

テーブルを作成するときにストレージエンジンを beam に設定する

CREATE TABLE testtable (a int) USING beam;

既存のテーブルのストレージエンジンを beam に変更する

ALTER TABLE testtable SET ACCESS METHOD beam;

パーティションテーブル

次の例は、ハイブリッド行-列ストレージテーブルを構成する方法を示しています。これらの例では、am_partitioned テーブルが使用されます。

CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;

パーティションを作成するときにパーティションのストレージモデルを指定する

  • am_partitioned_1 パーティションのストレージモデルを追加最適化列指向 (AOCO) ストレージに設定します。

    CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 0) USING ao_column;
  • 作成後、am_partitioned_2 パーティションはハイブリッド行-列ストレージモデルになります。

    CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 1) USING beam;

既存のパーティションのストレージモデルを変更する

am_partitioned_1 パーティションのストレージモデルを AORO ストレージに変更します。

ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;

データ圧縮

データ圧縮は、列指向テーブル、または appendonly パラメーターが true に設定されている AORO テーブルに使用されます。2 つの圧縮タイプを使用できます。

  • テーブルレベルの圧縮。

  • 列レベルの圧縮。各列に固有の圧縮アルゴリズムを適用できます。

AnalyticDB for PostgreSQL は、次の圧縮アルゴリズムをサポートしています。

  • V4.3: zlib、rle_type、none、および auto。

  • V6.0: zstd、zlib、rle_type、lz4、none、および auto。

  • V7.0: zstd、lz4、none、および auto。

説明

QuickLZ 圧縮アルゴリズムを指定することもできますが、zlib アルゴリズムに置き換えられます。rle_type アルゴリズムは、列指向テーブルにのみ適しています。

列指向テーブルを作成します。

CREATE TABLE am_testtable(x INT, y INT)
WITH (orientation=column);

圧縮レベル 5 の zlib 圧縮アルゴリズムを使用する列指向テーブルを作成します。

CREATE TABLE foo (a int, b text) 
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);

圧縮レベル 9 の zstd 圧縮アルゴリズムを使用する列指向テーブルを作成します。

CREATE TABLE foo (a int, b text) 
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);