Querying Delta Lake Tables in S3-compatible object storage#

概要#

外部テーブルを使用すると、 SQLを使用してS3互換のオブジェクトストレージに保存されているデータにアクセスおよび照会できます。 S3互換オブジェクトストレージのデータを参照する外部テーブルを作成し、標準のSQLコマンドを使用してデータを照会できます。

前提条件#

  • EDB Postgres AIアカウントとLakehouseノード。

  • デルタレイクテーブルとして保存されたデータを含むS3互換のオブジェクト保存場所。 *データの準備方法の詳細については、 独自のデータの持ち込み を参照してください。

  • パブリックバケットでない限り、S3互換のオブジェクト保存場所にアクセスするための資格情報。 *これらの資格情報はデータベース内に保存されます。この目的のために、権限を制限した別のユーザーを作成することをお勧めします。

  • クロスリージョンのレイテンシーのため遅くなる

  • データ転送にはAWSコスト0.01〜0.02/GBが発生します。現在、これらの下りコストは渡されませんが、当社はそれらを追跡し、インスタンスを終了する権利を留保します。

最初のステップは、データが存在するS3互換オブジェクトストレージを参照する外部ストレージ場所を作成することです。保存場所は、データにアクセスするために参照するデータベース内のオブジェクトです。各保存場所には、この目的のための名前があります。

名前付けの保存場所の作成は、 SQLで pgaa.create_storage_location ファンクションを実行して実行されます。 pgaa は、外部ストレージの場所を照会する機能を提供する拡張機能と名前空間の名前です。 create_storage_location ファンクションは、新しい保存場所の名前と、S3互換のオブジェクト保存場所のURIをパラメーターとして受け取ります。ファンクションは、オプションで3番目のパラメーターoptions を取ることができます。これは、オプション設定を指定するためのJSONオブジェクトであり、 PGAA functions reference で詳細に説明されています。たとえば、オプションで、保存場所のアクセスキーIDとシークレットアクセスキーを指定して、プライベートバケットへのアクセスを有効にできます。

次の例では、パブリックS3互換オブジェクト保存場所を参照する外部テーブルを作成します。

SELECT pgaa.create_storage_location(
  name => sample-data,
  url => s3://pgaa-sample-data-eu-west-1,
  options => {},
  msl_id => NULL
);

次の例では、プライベートS3互換のオブジェクト保存場所を参照する外部ストレージ場所を作成します。

SELECT pgaa.create_storage_location(
  name => private-data,
  url => s3://my-private-bucket,
  options => {"access_key_id": "my-access-key-id","secret_access_key": "my-secret-access-key"},
  msl_id => NULL
);

外部テーブルの作成#

外部格納場所を作成した後、格納場所のデータを参照する外部テーブルを作成できます。次の例では、S3互換のオブジェクト格納場所にデルタレイクテーブルを参照する外部テーブルを作成します。

CREATE TABLE public.customer () USING PGAA WITH (pgaa.storage_location = sample-data, pgaa.path = tpch_sf_1/customer);

CREATE TABLE ステートメントではスキーマが定義されていないことに注意してください。 pgaa拡張機能は、保存場所にスキーマが定義されることを想定しており、スキーマ自分自身は、pgaa.path オプションで指定されたパスに保存されているスキーマから派生します。 pgaa拡張機能は、デルタテーブルの列に最適なPostgres同等のデータ型を推論します。

外部テーブルのクエリー#

外部テーブルを作成した後、標準のSQLコマンドを使用して外部テーブルのデータを照会できます。次の例では、前の手順で作成した外部テーブルを照会します。

SELECT COUNT(*) FROM public.customer;