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

AnalyticDB:クロスデータベースクエリ

最終更新日:Sep 27, 2024

異なるデータベースに分散されているデータをクエリする場合は、AnalyticDB for PostgreSQLのクロスデータベースクエリ機能を使用して、データアクセス効率を向上させることができます。

概要

データベースは、PostgreSQLの高レベルユニットです。 インスタンス内の異なるデータベースは、相互にデータを照会できません。 これにより、ビジネスフィールド間のデータ分離が保証されますが、ビジネスフィールドまたはデータベース全体の関連クエリに不便が生じます。

AnalyticDB for PostgreSQLでは、外部データラッパー (FDW) を使用して、データベース間でデータをクエリできます。 FDWは、AnalyticDB for PostgreSQLの大規模並列処理 (MPP) アーキテクチャに基づいて開発され、計算ノードのパフォーマンス機能を使用して、データベース間クエリのデータアクセス効率を向上させます。

使用上の注意

  • クロスデータベースクエリ機能は、次のマイナーバージョンでのみサポートされています。

    • エラスティックストレージモードのAnalyticDB for PostgreSQL V7.0: V7.0.1.x以降。

    • エラスティックストレージモードのAnalyticDB for PostgreSQL V6.0: V6.3.11.2以降。

    • サーバーレスモードのAnalyticDB for PostgreSQL: V1.0.6.x以降。

  • FDW外部テーブルは、SELECTおよびINSERT操作のみをサポートします。 UPDATEおよびDELETE操作はサポートされていません。

  • エラスティックストレージモードのAnalyticDB for PostgreSQL V7.0のみが、結合プッシュダウンと集約プッシュダウンをサポートしています。

  • FDW外部テーブルの実行計画を生成できるのは、エラスティックストレージモードのAnalyticDB for PostgreSQL V7.0のOrcaオプティマイザだけです。 エラスティックストレージモードのAnalyticDB for PostgreSQL V6.0およびサーバーレスモードのAnalyticDB for PostgreSQLは、ネイティブオプティマイザを使用してFDW外部テーブルの実行計画を生成します。

手順

AnalyticDB for PostgreSQLインスタンスのdb01データベースとdb02データベース間のデータクエリ機能を有効にするには、次の手順を実行します。 この機能を有効にすると、db01データベースからdb02データベースのテーブルにアクセスできます。

  1. psqlツールを使用してAnalyticDB for PostgreSQLインスタンスに接続します。 詳細については、「クライアント接続」をご参照ください。

  2. db01とdb02という名前の2つのデータベースを作成します。

    CREATE DATABASE db01;
    CREATE DATABASE db02;
  3. greenplum_fdwおよびgp_parallel_retrieve_cursor拡張子をdb01およびdb02データベースにインストールします。 詳細については、「拡張機能のインストール、更新、およびアンインストール」をご参照ください。

  4. db02データベースに切り替え、テストデータを準備します。

    \c db02
    CREATE SCHEMA s01;
    CREATE TABLE s01.t1(a int, b int, c text); 
    INSERT INTO s01.t1 VALUES(generate_series(1,10),generate_series(11,20),'t1');
  5. db01データベースに切り替え、サーバーとユーザーマッピングを作成します。

    • サーバーを作成します。

      \c db01
      CREATE SERVER db02 FOREIGN DATA WRAPPER greenplum_fdw
          OPTIONS (host 'localhost',
            			 dbname 'db02');

      下表に、各パラメーターを説明します。

      パラメーター

      説明

      host

      データベース間でデータを照会するために使用されるエンドポイント。 このパラメーターをlocalhostに設定します。

      dbname

      ソースデータベースの名前。 この例では、このパラメーターはdb02に設定されています。

    • ユーザーマッピングを作成します。 ユーザーマッピングの詳細については、「ユーザーマッピングの作成」をご参照ください。

      CREATE USER MAPPING FOR CURRENT_USER SERVER db02
          OPTIONS (user 'report', password '******');

      下表に、各パラメーターを説明します。

      パラメーター

      説明

      user

      インスタンスへの接続に使用されるデータベースアカウントの名前。

      データベースアカウントには、db02データベースに対する読み取り権限が必要です。 INSERT操作を実行する場合は、書き込み権限も必要です。 データベースアカウントの作成方法については、「データベースアカウントの作成」をご参照ください。

      password

      データベースアカウントのパスワードを設定します。

  6. db01データベースのクロスデータベースクエリ機能を有効にします。

    次のいずれかの方法を使用して、データベース間クエリ機能を有効にできます。

    • ソーステーブルの外部テーブルを作成します。

      CREATE SCHEMA s01;
      CREATE FOREIGN TABLE s01.t1(a int, b int) 
      	server db02 options(schema_name 's01', table_name 't1');

      この方法では、以下のようなメリットとデメリットがあります。

      • 利点: 外部テーブルのカスタムDDL構造を指定できます。 たとえば、db02データベースのt1テーブルにはa、b、cフィールドが含まれていますが、db01データベースにはaとbフィールドしか含まれていません。 この方法を使用すると、外部テーブルを作成するときにフィールドを指定できます。

      • 短所: 各テーブルのDDL構造を知っている必要があります。 一度に複数の外部テーブルをインポートするには、長時間が必要です。

    • ソースデータベースのスキーマからすべてのテーブルをインポートします。

      CREATE SCHEMA s01;
      IMPORT FOREIGN SCHEMA s01 LIMIT TO (t1, t2, t3) 
      	FROM SERVER db02 INTO s01;

      この方法では、以下のようなメリットとデメリットがあります。

      • 利点: 短期間で外国のテーブルをインポートできます。 各テーブルのDDL構造を知る必要はありません。

      • 短所: 外部テーブルには、ソースデータベースのテーブルと同じ名前とフィールドが必要です。

      詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。

  7. db01データベースからdb02データベースのデータを照会します。

    db01データベースのデータを照会します。

    SELECT * FROM s01.t1;

    サンプル結果:

     a  | b  | c
    ----+----+----
      2 | 12 | t1
      3 | 13 | t1
      4 | 14 | t1
      7 | 17 | t1
      8 | 18 | t1
      1 | 11 | t1
      5 | 15 | t1
      6 | 16 | t1
      9 | 19 | t1
     10 | 20 | t1
    (10 rows)

関連ドキュメント

AnalyticDB for PostgreSQLは、クロスインスタンスクエリ機能をサポートしています。 詳細については、「クロスインスタンスクエリ」をご参照ください。