外部データとの連携 ~FDWで様々なデータソースとつなぐ~

デジタル技術の進化により、ビジネスは大きく変わりつつあります。IoTにより取得できる多種多様なデータと、既存の業務データとを組み合わせて、新たな価値へとつなげるなど、システムは様々なデータ(システム)と連携できることが求められています。PostgreSQLには、Foreign Data Wrapper(日本語では「外部データラッパー」と呼ばれ、以降「FDW」と略します)という機能があり、RDBやNoSQLなど様々な外部データにアクセスできます。ここでは、FDWの概要と仕組み、利用時のポイントについて説明します。なお、この記事は、PostgreSQL 11.1で検証しています。

1. FDWとは

FDWとは、SELECT文やUPDATE文などのSQL文を使用して、外部にあるデータにアクセスできるようにするための、PostgreSQLの拡張機能です。
FDWは、PostgreSQLが公開しているライブラリーを利用し、RDBやNoSQLなど、連携したいデータに合わせて独自に作成できます。この仕組みを利用して、これまでに多くの企業、プロジェクト、個人がFDWを作成しています。現在では約120種類近くものFDWが公開されていますので、それらを利用することで多様なデータにアクセスできます。

PostgreSQLからアクセスできる外部データ

PostgreSQLからアクセスできる外部データの主なカテゴリーには、以下のようなものがあります。

  • PostgreSQL
  • PostgreSQL以外のRDB(Oracle、SQL Server、MySQLなど)
  • NoSQLデータベース(MongoDB、Redis、Cassandraなど)
  • カラムナデータベース(MonetDB、Citusなど)
  • ファイル(CSVファイル、プレーンテキストなど)
  • 地理空間情報(PostGISなど)
  • LDAP
  • ビッグデータ(Apache Hadoop、BigQueryなど)
  • SNS(Facebook、Twitterなど)

これら外部データのアクセス先を、データソースと呼びます。

参考

以下のサイトに、FDWがまとめて掲載されています。目的に見合ったFDWを選ぶうえでの参考にしてください。

  • PostgreSQL Wiki

    データソースの分野によって13のカテゴリーに分類されたFDWが掲載されています。

  • PGXN(PostgreSQL Extension Network)

    PostgreSQLの拡張モジュールがFDWを含め多数公開されています。トップページで「fdw」「foreign data wrapper」といったタグを選択することでFDWに絞り込むことができます。

FDWの活用シーン:IoTデータを活用して新たなサービスを提供

FDWの様々なデータとつながる特性を活かし、既存のシステムを利用して新たなサービスを拡張できます。例えば、すでにある基幹データベースにある利用者情報と、位置情報やセンサー情報などのIoTデータを組み合わせて、新たなサービスを提供するようなシーンへの適用が期待できます。

FDWの活用シーン

2. FDWの仕組みと利用について

FDWは外部データを参照できることに加え、FDWによっては更新系のSQLを実行できたり、データの絞り込みやソートの処理などを、連携先で実行させる「プッシュダウン」機構を使えるものもあります。ここでは、FDWの仕組みと利用方法についての概要を説明します。

2.1 FDWの仕組み

FDWが外部のデータソースと連携するための仕組み、およびPostgreSQL内部での処理の流れについて、説明します。

外部のデータソースにアクセスする仕組み

外部のデータソースにアクセスするためには、対応するFDWをPostgreSQLの拡張機能としてインストール、および外部データを「外部テーブル」として定義しておきます。外部テーブルに対して、SQL文で問い合わせることで、FDWを介して外部データにアクセスできます。

Loading component...

PostgreSQL内部での処理の流れ

クライアントから外部テーブルを含むSQL文を発行すると、PostgreSQLの内部では、以下の流れで処理が実行されます。

Loading component...

Loading component...

2.2 FDWの利用の流れ

Loading component...

以下は、外部にあるPostgreSQLと連携するためのFDW「postgres_fdw」を利用した場合の例を示したものです。postgres_fdwの場合、利用するための準備として下図のローカル側で上から示した順番にオブジェクトを作成します。

Loading component...

備考 CREATE SERVER、CREATE USERMAPPING、CREATE FOREIGN TABLEのOPTIONSに指定できる項目や書式は、利用するFDWごとに違いがあります。

オブジェクトの種類

Loading component...

外部テーブルが作成されたことを確認する方法の1つとして、「\det+」コマンドを実行し外部テーブルの一覧から確認する方法があります。実行例に関しては、以下の記事をご覧ください。

Loading component...

Loading component...

2.3 プッシュダウンの利用

Loading component...

Loading component...

Loading component...

Loading component...

2.4 利用時のポイント

ここでは、主にpostgres_fdwを例に挙げ、FDWを利用するうえでのポイントについて、いくつかご紹介します。なお、他のFDWではポイントが異なる場合がありますので、別途FDWのドキュメントを確認してください。

更新トランザクションの制御

外部テーブルに対する更新トランザクションの利用において、留意する点があります。

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

Loading component...

日本語環境では以下のようなメッセージが出力されることがあります。

Loading component...

3. まとめ

Loading component...

Loading component...

出典

Loading component...

Loading component...

Loading component...

2023年9月1日更新

こちらもおすすめ

Loading component...

Loading component...

富士通のソフトウェア公式チャンネル(YouTube)

富士通のミドルウェア製品のご紹介や各種イベント・セミナーの講演内容、デモンストレーションなどの動画をご覧いただけます。

Loading component...

Loading component...