この Topic では、Beam ストレージエンジンの使用方法について説明します。
使用上の注意
エラスティックストレージモードの AnalyticDB for PostgreSQL V7.0.x インスタンスのみが Beam ストレージエンジンをサポートします。
Beam ストレージエンジンは、エラスティックストレージモードの AnalyticDB for PostgreSQL V7.0.6.2 でパブリックプレビューが完了した後、正式に利用可能になります。このバージョンでは、パブリックプレビュー中に発生した問題が修正されています。AnalyticDB for PostgreSQL インスタンスを V7.0.6.2 以降に更新することをお勧めします。
Beam テーブルの作成
Beam エンジンでテーブルを作成するには、`CREATE TABLE` 文で USING beam 句を指定します。次の例では、test という名前の Beam テーブルを作成します。
CREATE TABLE test(a INT, b INT)
USING beam
DISTRIBUTED BY (a);デフォルトでは、Beam テーブルはすべての列に LZ4 9 レベルの圧縮を使用します。
ソートキーの指定
ソートキーを指定して、データが物理的に集約される方法を定義できます。Beam は、指定されたソートキーとプライマリキー列の最大 (Max) 値と最小 (Min) 値を収集します。これにより、ソートキーにフィルター条件を含むクエリが高速化されます。たとえば、SQL 文に sale_date='20230715' 条件が含まれている場合、sale_date 列でデータをソートすると、クエリのパフォーマンスが大幅に向上します。
ORDER BY 句で 1 つ以上のソートキーを指定できます。Beam は、最適化のために指定されたソートキーに基づいて、バックグラウンドでデータを自動的に再ソートします。
例
ソートキーを含む Beam テーブルを作成します。
CREATE TABLE beam_example (
id integer,
name text,
ftime timestamp
)
USING beam
DISTRIBUTED BY (id)
ORDER BY(id);Beam テーブルに 10,000,000 行のデータを書き込み、ソートキーのフィルター条件を使用してデータをクエリします。
INSERT INTO beam_example
SELECT r, md5((r*random())::text), now() + interval '1 seconds' *(r*random())::int
FROM generate_series(1,10000000)r;SELECT * FROM beam_example WHERE id = 100000;圧縮アルゴリズムの指定
Beam は、ZSTD、LZ4、AUTO、GDICT などの複数の圧縮アルゴリズムをサポートしています。必要に応じて圧縮アルゴリズムを選択できます。
デフォルトの圧縮アルゴリズム:
カーネルバージョン V7.1.1.4 以降を実行する AnalyticDB for PostgreSQL インスタンスの場合、デフォルトで AUTO レベル 1 の圧縮が使用されます。
V7.1.1.4 より前のカーネルバージョンを実行する AnalyticDB for PostgreSQL インスタンスの場合、デフォルトで LZ4 レベル 1 の圧縮が使用されます。
ZSTD
ZSTD は LZ4 よりも高い圧縮率を提供しますが、圧縮および展開のパフォーマンスは低くなります。
LZ4
LZ4 は、圧縮率を犠牲にして、高い圧縮および展開パフォーマンスを提供します。
AUTO
AUTO は、Beam ストレージエンジンが自己開発した適応型圧縮アルゴリズムです。数値列の場合、Beam ストレージエンジンは、データレイアウトに基づく一般的な圧縮アルゴリズムよりも高い圧縮率と高い圧縮および展開パフォーマンスを提供します。他のタイプの列の場合、Beam ストレージエンジンは LZ4 を使用してデータを圧縮します。
GDICT
GDICT は、Beam ストレージエンジンが自己開発したグローバル辞書エンコーディング圧縮アルゴリズムです。 GDICT は、一意の値が 256 未満の低カーディナリティ列に対して、高い圧縮率と展開パフォーマンスを提供します。さらに、GDICT は特定のシナリオでフィルター条件プッシュダウン機能を使用して、一般的な圧縮アルゴリズムの最大 100 倍のスキャンパフォーマンスを提供します。
例
ZSTD レベル 9 の圧縮を使用する Beam テーブルを作成します。
CREATE TABLE beam_example (
id integer,
name text,
ftime timestamp
) USING beam
WITH(compresstype='zstd', compresslevel=9) ;自動最適化
Beam テーブルに対する複数の書き込み、更新、または削除操作により、時間の経過とともに大量の期限切れデータが作成され、スキャンパフォーマンスが低下する可能性があります。自動最適化は、データを最適化するバックグラウンドプロセスです。期限切れのデータを自動的に再利用し、小さなファイルをマージし、ソートキーによってデータを集約して、クエリのパフォーマンスを維持します。このプロセスは、デフォルトで自動的に実行されます。OPTIMIZE beam_example; コマンドを実行して、最適化プロセスを手動でトリガーすることもできます。