Writing to object storage#

PostgresアナリティクスアクセラレータPGAAは、 CREATE TABLE AS SELECT CTAS構文を使用したデータレイクへの直接書き込みをサポートしています。これにより、任意のソースからのデータを処理および永続化できます。ローカルのPostgresテーブルを変換するか、既存のオブジェクトストレージファイルを再構築するか、両方のデータを結合するかどうか。 IcebergやDelta Lakeのような高性能カラムナーフォーマットに変換します。

PGAAはPostgresクエリエグゼキューターと統合されているため、CTASオペレーションのソースデータは、インスタンスにアクセスできる任意の場所に存在できます。これにより、いくつかの高度なワークフローが有効になります。

  • エクスポート 標準のローカルPostgresテーブルからデータレイクにデータを移動して、履歴データをアーカイブします。

  • 変換 1つのオブジェクト格納場所から読み取り、結合または集計を実行し、結果を別のクラウドディレクトリに書き込みます。

  • フェデレーションジョイン ローカルリレーショナルテーブルをリモートオブジェクトストレージテーブルと結合し、結合された結果をクラウドに書き込みます。

PGAA アクセス方法を使用することにより、クエリの結果セットを指定した保存場所に直接ストリーミングできます。 AWS S3およびS3互換API、Google Cloud Storage GCS、Azure Blob Storage ADLS Gen2、およびローカルファイルシステムを含む、または統合されたIcebergカタログに直接。

スタンドアロンのストレージ場所または統合されたIcebergカタログを使用して、CTAS操作を実行できます。

注釈

CTASは、不変のライトワンス操作用に設計されています。オブジェクトストレージでの継続的な`INSERT` 、UPDATE 、または`DELETE` 操作など、より高度な書き込み機能については、 PGD integration を参照してください。

スタンドアロンの保存場所を使用する#

この方法は、1回限りのエクスポートまたはアドホックデータの移動に最適です。 PGAAは、Postgres行からターゲット形式への変換を処理し、必要なメタデータまたはトランザクションログIcebergマニフェストまたはDeltaトランザクションログなどを生成し、単一のアトミック操作で結果をコミットします。

CTASを介してオブジェクトストレージにテーブルをプロビジョニングするには、2段階のプロセスが必要です。最初に、ストレージの場所を介してリモートストレージ環境への物理接続を確立し、次にクエリ結果をその場所にマッピングするSQLコマンドを実行します。

保存場所の作成#

オブジェクトストレージに書き込むには、 create a PGFS storage location を行う必要があります。これにより、ターゲットバケットが定義され、必要な資格情報が提供されます。例

SELECT pgfs.create_storage_location(
    my_lake_data,
    s3://your-bucket-name/path,
    {"aws_region": "us-east-1", "aws_access_key_id": "...", "aws_secret_access_key": "..."}
);

注釈

保存場所に関連付けられた資格情報には、宛先バケットの読み取りおよび書き込み権限が必要です。これは、次のファンクションを実行して確認できます。成功した場合は`NULL` を結果ます。

SELECT pgaa.test_storage_location (my_lake_data, true);

CTASを使用したテーブルの作成#

USING PGAA WITH およびAS 句を使用して、結果セットをオブジェクトストレージの構造化テーブルフォーマットに直接エクスポートするテーブルを作成します。例

CREATE TABLE s3_export_table
USING PGAA
WITH (
    pgaa.storage_location = my_lake_data,
    pgaa.path = path/in/s3/iceberg_data,
    pgaa.format = iceberg
) AS
SELECT * FROM local_source_table;

そこで

  • pgaa.format 宛先テーブルフォーマットを指定します。サポートされている値はiceberg およびdelta です。

  • pgaa.storage_location 前の手順で定義した保存場所の名前。

  • pgaa.path 宛先ディレクトリ。 PGAAは、このパス内にメタデータとログディレクトリを自動的に作成します。

Icebergカタログを使用する#

Icebergカタログを統合している場合は、CTASを使用してそれに書き込むことができます。このモードでは、カタログはストレージパスとテーブルのバージョン管理を自動的に管理します。

CTASを介してオブジェクトストレージのテーブルに書き込み、Icebergカタログを使用するには、2つのステップで構成されます。最初にカタログ接続を構成し、次にそのカタログを介してクエリ結果をマップするSQLコマンドを実行します。

カタログ接続の構成#

ファンクション pgaa.add_catalog() を使用して、外部IcebergカタログをPostgresインスタンスに登録します。例

SELECT pgaa.add_catalog(
    my_iceberg_catalog,
    iceberg-rest,
    {
        "url": "https://your-catalog-endpoint.com",
        "warehouse_name": "your_warehouse_name",
        "warehouse": "your_warehouse_id",
        "token": "your_secret_auth_token"
        "danger_accept_invalid_certs": "false"
    }
);

構成オプションの完全なリストについては、 カタログ接続の追加 を参照してください。

注釈

カタログへの書き込み権限が必要です。これは、次のファンクションを実行して確認できます。成功した場合は`NULL` を結果ます。

SELECT pgaa.test_catalog(my_iceberg_catalog, test_writes := TRUE);

カタログ管理CTASテーブルの作成#

USING PGAA WITH およびAS 句を使用して、結果セットを構成済みのIcebergカタログに直接エクスポートするテーブルを作成します。例

CREATE TABLE export_local_transactions
USING PGAA
WITH (
    pgaa.format = iceberg,
    pgaa.managed_by = my_iceberg_catalog,
    pgaa.catalog_namespace = public,
    pgaa.catalog_table = managed_sales_data
) AS
SELECT * FROM local_transactions;

そこで

  • pgaa.format 宛先テーブルフォーマットを設定します。現在、’iceberg’のみがサポートされています。

  • pgaa.managed_by カタログ名を指定します。

  • pgaa.catalog_namespace Icebergカタログ内でテーブルが配置される名前空間またはデータベースを定義します。

  • pgaa.catalog_table データレイクに作成するテーブルの名前を設定します。

CTASの制限#

CTASはデータの移動と変換のための強力なツールですが、次の制約のある特定の実行モデルで動作します。

  • エンジンの依存関係 CTAS操作を実行する場合、ソース内部クエリはDirectScanを利用しません。代わりに、データの取得は、CompatScanを介して標準のPostgresエンジンによって処理されます。したがって、SELECT フェーズ内の複雑な結合または集計は、Seafowlエンジンが提供する完全なベクトル化加速の恩恵を受けられません。

  • 自動上書きなし 偶発的なデータの損失を防ぐため、スタンドアロンの保存場所を使用する場合、指定されたpgaa.path にデータが既に存在する場合、コマンドはデフォルトで失敗します。既存のデータを置き換える場合は、CTASステートメントのWITH 句でpgaa.purge_data_if_exists パラメーターをtrueに明示的に設定する必要があります。

  • ライトワンス CTASは、アトミックな書き込みワンス操作です。データを変更するには、テーブルを削除し、新しいパスで再作成する必要があります。