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

PolarDB:oss_fdw

最終更新日:Sep 26, 2024

このトピックでは、の概要、制限、および使用方法について説明します。oss_fdw拡張子。

概要

oss_fdwは、 PolarDB for Oracleの外部データラッパー (FDW) 拡張です。 Object Storage Service (OSS) データをPolarDBクラスターの外部テーブル定義に関連付けることができます。 これにより、標準のSQL文を実行してデータを読み書きしながら、データベーステーブルのデータをOSSに保存できます。

OSSは、安全で費用対効果が高く、信頼性の高いクラウドストレージサービスであり、大量のデータを保存できます。 OSSは、99.995% データの可用性を提供するように設計されています。 データベース内の履歴データ、読み取り専用のアーカイブデータ、およびコールドデータは、ストレージコストを節約するためにOSSに保存するのに理想的です。

前提条件

  • OSSが有効化され、バケットが作成されます。 詳細については、「」をご参照ください。 OSSとは

制限

oss_fdw foreignテーブルは、SELECTINSERTおよびTRUNCATEステートメントのみをサポートし、UPDATEまたはDELETEステートメントはサポートしません。 したがって、拡張機能はデータのアーカイブにのみ使用されます。データがOSSに書き込まれた後、データは読み取りのみ可能で、更新はできません。

使用法

Install the extension

拡張の作成oss_fdw;

外部データサーバーの作成

OSS接続情報を設定し、PolarDBとOSSバケット間のマッピングを作成します。

例:

CREATE SERVER ossserver
外国データラッパーoss_fdw
オプション (
    ホスト 'oss -cn-xxx.aliyuncs.com '、
    バケット 'mybucket' 、
    id 'xxx',
    キー 'xxx'
); 
説明

ステートメント内のパラメータ:

  • host: OSSのエンドポイント。

  • bucket: OSSバケットの名前。

  • id /key: Alibaba CloudアカウントのAccessKey IDとAccessKeyシークレット。

外部テーブルをOSSディレクトリにマップする

  1. OSS外部テーブルの作成 PolarDBで指定された外部データソースのディレクトリにマップします。外部データサーバーの作成.

    FOREIGN TABLE t1_ossを作成 (
        id INT,
        fフロート,
        txtテキスト
    )
    サーバーossserver
    オプション (dir 'archive/'); 
  2. データをOSS外部テーブルにインポートします。

    INSERT INTO t1_oss VALUES (generate_series(1,100) 、0.1、'hello');

    テーブルに挿入されたデータは、archive/ ディレクトリのファイルに書き込まれます。 次の方法を使用して、外部テーブルを照会できます。

    t1_ossからの選択カウント (*) を説明します。
                               クエリ計画
    -----------------------------------------------------------------
     集計 (コスト=6.54 .. 6.54行=1幅=8)
       -> t1_ossの外部スキャン (コスト=0.00 .. 6.40行=54幅=0)
             OSS上のディレクトリ: archive /
             OSSファイルの数: 1
             OSSファイルの合計サイズ: 1292バイト
    (5行)
    
    t1_ossからカウント (*) を選択します。
     カウント
    -------
       100
    (1行) 

    INSERT文がテーブルで再度実行されると、OSSディレクトリの新しいファイルにデータが書き込まれます。

    INSERT INTO t1_oss VALUES (generate_series(1,100) 、0.1、'hello');
    INSERT 0 100
    
    t1_ossからの選択カウント (*) を説明します。
                                クエリ計画
    -------------------------------------------------------------------
     集計 (コスト=12.07 .. 12.08行=1幅=8)
       -> 外部スキャンt1_oss (コスト=0.00 .. 11.80行=108幅=0)
             OSS上のディレクトリ: archive /
             OSSファイルの数: 2
             OSSファイルの合計サイズ: 2584バイト
    (5行)
    
    t1_ossからカウント (*) を選択します。
     カウント
    -------
       200
    (1行) 

    TRUNCATEを実行して、外部テーブルのすべてのOSSマッピングファイルを削除します。

    トランケートt1_oss;
    トランケートテーブル
    
    t1_ossからカウント (*) を選択します。警告: ossのファイルと一致しません
     カウント
    -------
         0
    (1行) 

外部テーブルをディレクトリプレフィックスにマップする

  1. 外部テーブルを作成します。使用プレフィックス オプションを使用します。

    FOREIGN TABLE t2_ossの作成 (
        id INT,
        fフロート,
        txtテキスト
    )
    サーバーossserver
    オプション (プレフィックス 'prefix/file_'); 
  2. 外部テーブルでINSERTステートメントを実行すると、同じプレフィックス名を持つ複数のファイルが作成されます

    INSERT INTO t2_oss VALUES (generate_series(1,100) 、0.1、'hello');
    INSERT 0 100
    
    INSERT INTO t2_oss VALUES (generate_series(1,100) 、0.1、'hello');
    INSERT 0 100
    
    t2_ossからの選択カウント (*) を説明します。
                                クエリ計画
    -------------------------------------------------------------------
     集計 (コスト=12.07 .. 12.08行=1幅=8)
       -> t2_ossの外部スキャン (コスト=0.00 .. 11.80行=108幅=0)
             OSS上のディレクトリ: prefix/file_
             OSSファイルの数: 2
             OSSファイルの合計サイズ: 2584バイト
    (5行)
    
    t2_ossからカウント (*) を選択します。
     カウント
    -------
       200
    (1行) 

OSSファイルの保存形式

oss_fdwでは、OSSに保存されているデータの形式を設定できます。 デフォルト値CSVです。 形式を明示的に指定することもできます。 OSS外部テーブルINSERT文を実行すると、データはCSV形式でOSSファイルに書き込まれます。

FOREIGN TABLE t3_ossの作成 (
    id INT,
    fフロート,
    txtテキスト
)
サーバーossserver
オプション (dir 'archive_csv/'、形式 'csv'); 

OSS外部テーブルのファイルの表示

  1. OSS外部テーブルを作成し、INSERTステートメントを3回実行して3つのOSSファイルにデータを書き込みます。

    FOREIGN TABLE t4_ossの作成 (
        id INT,
        fフロート,
        txtテキスト
    )
    サーバーossserver
    オプション (dir 'archive_file_list/');
    
    INSERT INTO t4_oss VALUES (generate_series(1,10000) 、0.1、'hello');
    INSERT INTO t4_oss VALUES (generate_series(1,10000) 、0.1、'hello');
    INSERT INTO t4_oss VALUES (generate_series(1,10000) 、0.1、'hello'); 
  2. 次の関数を使用し、OSS外部テーブルのテーブル名とスキーマ名を指定して、OSS外部テーブルのファイルを表示します (デフォルト値はpublicです) 。

    SELECT * FROM oss_fdw_list_file('t4_oss');
                       名前 | サイズ
    ------------------------------------------- --------
     archive_file_list/_t4_oss_741147680906121 | 148894
     archive_file_list/_t4_oss_741147680965631 | 148894
     archive_file_list/_t4_oss_741147681201236 | 148894
    (3行)
    
    SELECT * からoss_fdw_list_file('t4_oss', 'public');
                       名前 | サイズ
    ------------------------------------------- --------
     archive_file_list/_t4_oss_741147680906121 | 148894
     archive_file_list/_t4_oss_741147680965631 | 148894
     archive_file_list/_t4_oss_741147681201236 | 148894
    (3行) 

OSS圧縮

compressiontypeパラメーター、OSSファイルにデータを書き込むための圧縮アルゴリズムを指定します。 このパラメーターはデフォルトでは空のままです。これは、データが圧縮されていないことを示します。 有効な値: gzipとzstd。

compressionlevelパラメータは、圧縮レベルを指定する。 より高い圧縮レベルは、より多くのCPUが圧縮および解凍中に占有されることを示しますネットワーク経由で転送されるデータ量が少なくなり、外部テーブルで使用されるOSSスペースが少なくなります。.

Gzip圧縮アルゴリズム

Gzip圧縮アルゴリズムの圧縮レベルの有効値: 1 ~ 9デフォルト値: 6。

FOREIGN TABLE t5_ossの作成 (
    id INT,
    fフロート,
    txtテキスト
)
サーバーossserver
オプション (
    dir 'archive_file_compression/'、
    compressiontype 'gzip' 、
    compressionlevel '9'
);

INSERT INTO t5_oss VALUES (generate_series(1,10000) 、0.1、'hello');
INSERT INTO t5_oss VALUES (generate_series(1,10000) 、0.1、'hello');
INSERT INTO t5_oss VALUES (generate_series(1,10000) 、0.1、'hello'); 

OSS外部テーブルのファイルを表示すると、Gzip圧縮されたファイルのサイズは、圧縮されていないファイルのサイズよりも大幅に小さくなります

SELECT * FROM oss_fdw_list_file('t4_oss');
                   名前 | サイズ
------------------------------------------- --------
 archive_file_list/_t4_oss_741147680906121 | 148894
 archive_file_list/_t4_oss_741147680965631 | 148894
 archive_file_list/_t4_oss_741147681201236 | 148894
(3行)

SELECT * からoss_fdw_list_file('t5_oss');
                        名前 | サイズ
----------------------------------------------------- -------
 archive_file_compression/_t5_oss_741147752563794.gz | 23654
 archive_file_compression/_t5_oss_741147752633713.gz | 23654
 archive_file_compression/_t5_oss_741147752828680.gz | 23654
(3行) 

Zstandard圧缩アルゴリズム

説明

Zstandard圧縮アルゴリズムは、PostgreSQL 14 (バージョン14.9.13.0以降) を実行するクラスターでのみサポートされます。

Zstandard圧縮アルゴリズムの圧縮レベルの有効値: -7〜22。 デフォルト値: 6。

FOREIGN TABLE t6_ossの作成 (
    id INT,
    fフロート,
    txtテキスト
)
サーバーossserver
オプション (
    dir 'archive_file_zstd/'、
    compressiontype 'zstd' 、
    compressionlevel '9'
);

INSERT INTO t6_oss VALUES (generate_series(1,10000) 、0.1、'hello');
INSERT INTO t6_oss VALUES (generate_series(1,10000) 、0.1、'hello');
INSERT INTO t6_oss VALUES (generate_series(1,10000) 、0.1、'hello'); 

OSS外部テーブルのファイルを表示すると、Zstandardで圧縮されたファイルのサイズは、圧縮されていないファイルのサイズよりも大幅に小さくなります。

SELECT * FROM oss_fdw_list_file('t4_oss');
                   名前 | サイズ
------------------------------------------- --------
 archive_file_list/_t4_oss_741147680906121 | 148894
 archive_file_list/_t4_oss_741147680965631 | 148894
 archive_file_list/_t4_oss_741147681201236 | 148894
(3行)

SELECT * からoss_fdw_list_file('t6_oss');
                     名前 | サイズ
----------------------------------------------- ------
 archive_file_zstd/_t6_oss_748106174612293.zst | 6710
 archive_file_zstd/_t6_oss_748106174700206.zst | 6710
 archive_file_zstd/_t6_oss_748106174866829.zst | 6710
(3行) 

拡張機能を削除するRemove the extension

ドロップ延長oss_fdw;