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

Hologres:OSS データレイクアクセラレーション

最終更新日:Feb 04, 2026

Hologres のデータレイクアクセラレーションは、Alibaba Cloud の Data Lake Formation (DLF) と Object Storage Service (OSS) を活用し、柔軟なデータアクセスと分析機能、そして効率的なデータ処理を実現します。これにより、OSS データレイクに保存されているデータのクエリと分析が大幅に高速化されます。このトピックでは、DLF 1.0 を使用して Hologres で OSS データを読み書きする方法について説明します。

前提条件

  • Data Lake Formation (DLF) 1.0 が有効になっています。詳細については、「クイックスタート」をご参照ください。DLF をサポートするリージョンについては、「利用可能なリージョンとエンドポイント」をご参照ください。

  • OSS を有効化し、データを準備していること。詳細については、「OSS の有効化」をご参照ください。

  • OSS の権限を付与していること。外部テーブルを介して OSS データにアクセスするには、使用するアカウントに必要な OSS アクセス権限が必要です。権限がない場合、外部テーブルが正常に作成されても、データをクエリすることはできません。OSS の権限付与の詳細については、「バケットポリシー (Java SDK V1)」をご参照ください。

  • (任意) OSS-HDFS 機能を使用する場合は、まず OSS-HDFS サービスを有効化します。詳細については、「OSS-HDFS の有効化」をご参照ください。

注意事項

  • Hologres から OSS にデータをエクスポートする場合、INSERT INTO コマンドのみ使用できます。INSERT ON CONFLICTUPDATE、または DELETE コマンドは使用できません。

  • Hologres V1.3 以降のバージョンのみが OSS へのデータ書き戻しをサポートしており、サポートされているフォーマットは ORC、Parquet、CSV、SequenceFile のみです。

  • 読み取り専用セカンダリインスタンスは、データレイクアクセラレーションをサポートしていません。

  • IMPORT FOREIGN SCHEMA 文は、OSS からのパーティションテーブルのインポートをサポートしています。Hologres は一度に最大 512 個のパーティションをクエリできます。単一のクエリがこの制限を超えないようにするには、パーティションフィルター条件を追加する必要があります。

  • データレイクのクエリは、外部テーブルデータの特定のクエリパーティションを実行時に Hologres のメモリとキャッシュにロードして計算することで機能します。クエリパフォーマンスを維持するため、Hologres はクエリごとのデータ量を 200 GB (パーティションフィルター適用後) に制限しています。

  • UPDATEDELETETRUNCATE などのコマンドは、外部テーブルではサポートされていません。

  • 新しいバージョンの DLF は、OSS データレイクアクセラレーションをサポートしていません。このアクセラレーション機能をサポートしているのは DLF 1.0 (DLF-Legacy) のみです。

操作手順

環境設定

  1. Hologres インスタンスで DLF_FDW バックグラウンド構成を有効にします。

    Hologres コンソールで、Instances または Instance Details ページに移動します。対象インスタンスの Actions 列で Data Lake Acceleration をクリックして確認します。システムは自動的に DLF_FDW を構成し、インスタンスを再起動します。再起動が完了すると、サービスが使用可能になります。

    説明

    Hologres コンソールで DLF_FDW を有効にするセルフサービスオプションは、段階的に展開されています。Data Lake Acceleration ボタンが表示されない場合は、一般的なスペックアップ準備のエラー」をご参照いただくか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「より多くのオンラインサポートを受けるにはどうすればよいですか?」をご参照ください。

    DLF_FDW を有効にすると、システムはデフォルトのリソース (現在 1 コア、4 GB メモリ) を使用します。追加のリソースを購入する必要はありません。

  2. 拡張機能を作成します。

    スーパーユーザーは、データベースで次の文を実行して、DLF 1.0 を介した OSS データの読み取りを有効にする拡張機能を作成する必要があります。この操作はデータベース全体に適用され、データベースごとに一度だけ実行する必要があります。

    CREATE EXTENSION IF NOT EXISTS dlf_fdw;
  3. 外部サーバーを作成します。

    重要

    外部サーバーの作成には、スーパーユーザーアカウントを使用する必要があります。そうしないと、権限エラーが発生します。

    Hologres は DLF 1.0 のマルチカタログ機能をサポートしています。EMR クラスターが 1 つしかない場合は、DLF 1.0 のデフォルトカタログを使用します。複数の EMR クラスターがある場合は、カスタムカタログを使用して Hologres インスタンスを異なる EMR クラスターに接続します。データソースとしてネイティブ OSS または OSS-HDFS を選択することもできます。構成の詳細は次のとおりです。

    • DLF 1.0 のデフォルトカタログとネイティブ OSS ストレージを使用してサーバーを作成します。構文例:

      -- 既存のサーバーを表示 (meta_warehouse_server と odps_server は組み込みであり、変更または削除はできません)
      SELECT * FROM pg_foreign_server;
      
      -- 既存のサーバーを削除
      DROP SERVER SERVER_NAME CASCADE;
      
      -- サーバーを作成
      CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
          dlf_region '<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID'</span>,
          dlf_endpoint 'dlf-share.<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID.aliyuncs.com'</span>,
          oss_endpoint 'oss-<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID-internal.aliyuncs.com'</span>
      );
    • データレイクストレージとして OSS-HDFS を使用します。

      • OSS-HDFS エンドポイント (リージョンノード) を決定します。

        DLF_FDW を介して OSS-HDFS に保存されたデータにアクセスするには、OSS-HDFS サービスドメイン名を設定する必要があります。このドメイン名は、OSS-HDFS を有効化した後、OSS コンソールのバケット概要ページで確認できます。

        image

      • 外部サーバーを作成し、エンドポイントを設定します。

        バケットドメイン名を確認した後、Hologres で DLF_FDW の oss_endpoint オプションを設定します。構文例:

        CREATE EXTENSION IF NOT EXISTS dlf_fdw;
        
        CREATE SERVER IF NOT EXISTS SERVER_NAME FOREIGN DATA WRAPPER dlf_fdw OPTIONS (
            dlf_region 'REGION_ID',
            dlf_endpoint 'dlf-share.REGION_ID.aliyuncs.com',
            oss_endpoint 'BUCKET_NAME.<span class="var-span" contenteditable="true" data-var="REGION_ID">REGION_ID.oss-dls.aliyuncs.com'</span> -- OSS-HDFS バケットエンドポイントのドメイン名
        );
      • パラメーターの説明

        パラメーター

        説明

        SERVER_NAME

        カスタムサーバー名。

        dlf_server

        dlf_region

        DLF 1.0 がデプロイされているリージョン。ご利用のリージョンに基づいて選択してください。

        • 中国 (北京):cn-beijing

        • 中国 (杭州):cn-hangzhou

        • 中国 (上海):cn-shanghai

        • 中国 (深セン):cn-shenzhen

        • 中国 (張家口):cn-zhangjiakou

        • シンガポール:ap-southeast-1

        • ドイツ (フランクフルト):eu-central-1

        • 米国 (バージニア):us-east-1

        • インドネシア (ジャカルタ):ap-southeast-5

        cn-hangzhou

        dlf_endpoint

        より良いアクセスパフォーマンスのために、内部 DLF 1.0 エンドポイントを使用します。

        • 中国 (北京):dlf-share.cn-beijing.aliyuncs.com

        • 中国 (杭州):dlf-share.cn-hangzhou.aliyuncs.com

        • 中国 (上海):dlf-share.cn-shanghai.aliyuncs.com

        • 中国 (深セン):dlf-share.cn-shenzhen.aliyuncs.com

        • 中国 (張家口):dlf-share.cn-zhangjiakou.aliyuncs.com

        • シンガポール:dlf-share.ap-southeast-1.aliyuncs.com

        • ドイツ (フランクフルト):dlf-share.eu-central-1.aliyuncs.com

        • 米国 (バージニア):dlf-share.us-east-1.aliyuncs.com

        • インドネシア (ジャカルタ):dlf-share.ap-southeast-5.aliyuncs.com

        dlf-share.cn-shanghai.aliyuncs.com

        oss_endpoint

        • ネイティブ OSS ストレージの場合、より良いアクセスパフォーマンスのために OSS 内部エンドポイントを使用します。

        • OSS-HDFS は内部ネットワークアクセスのみをサポートしています。

        • OSS

          oss-cn-shanghai-internal.aliyuncs.com
        • OSS-HDFS

          cn-hangzhou.oss-dls.aliyuncs.com
  4. (任意) ユーザーマッピングを作成します。

    Hologres は CREATE USER MAPPING コマンドを使用して、DLF 1.0 および OSS にアクセスするための別のユーザー ID を指定することをサポートしています。例えば、外部サーバーのオーナーは CREATE USER MAPPING を使用して、RAM ユーザー 123xxx に外部 OSS データへのアクセスを割り当てることができます。

    指定されたアカウントが外部データのクエリ権限を持っていることを確認してください。この仕組みの詳細については、「postgres create user mapping」をご参照ください。

    CREATE USER MAPPING FOR ACCOUNT_UID SERVER SERVER_NAME OPTIONS 
    (
        dlf_access_id 'YOUR_ACCESS_KEY', 
        dlf_access_key 'YOUR_ACCESS_SECRET',
        oss_access_id 'YOUR_ACCESS_KEY', 
        oss_access_key 'YOUR_ACCESS_SECRET'
    );

    例:

    -- 現在のユーザーのユーザーマッピングを作成
    CREATE USER MAPPING FOR current_user SERVER SERVER_NAME OPTIONS
    (
        dlf_access_id 'YOUR_ACCESS_KEY', 
        dlf_access_key 'YOUR_ACCESS_SECRET',
        oss_access_id 'YOUR_ACCESS_KEY', 
        oss_access_key 'YOUR_ACCESS_SECRET'
    );
    
    -- RAM ユーザー 123xxx のユーザーマッピングを作成
    CREATE USER MAPPING FOR "p4_123xxx" SERVER SERVER_NAME OPTIONS
    (
        dlf_access_id 'YOUR_ACCESS_KEY', 
        dlf_access_key 'YOUR_ACCESS_SECRET',
        oss_access_id 'YOUR_ACCESS_KEY', 
        oss_access_key 'YOUR_ACCESS_SECRET'
    );
    
    -- ユーザーマッピングを削除
    DROP USER MAPPING FOR current_user SERVER SERVER_NAME;
    DROP USER MAPPING FOR "p4_123xxx" SERVER SERVER_NAME;

OSS レイクデータの読み取り

DLF 1.0 データソースを例として、DLF 1.0 でメタデータテーブルを準備し、抽出されたデータが含まれていることを確認します。Hologres で外部テーブルを使用して DLF 1.0 を介して OSS データにアクセスするには、次のステップに従います。

  1. Hologres インスタンスに外部テーブルを作成します。

    サーバーを作成した後、CREATE FOREIGN TABLE または IMPORT FOREIGN SCHEMA を使用して、DLF 1.0 によって抽出された OSS データを読み取るための外部テーブルを個別または一括で作成します。

    説明

    OSS 外部テーブルが既存の Hologres 内部テーブルと同じ名前を持つ場合、IMPORT FOREIGN SCHEMA はその外部テーブルの作成をスキップします。CREATE FOREIGN TABLE を使用して、競合しないテーブル名を定義してください。

    Hologres は OSS からのパーティションテーブルの読み取りをサポートしています。サポートされているパーティションキーのデータ型は TEXT、VARCHAR、INT です。CREATE FOREIGN TABLE を使用する場合、実際のデータは保存されず、フィールドマッピングのみが行われるため、パーティションフィールドを通常のフィールドとして扱います。IMPORT FOREIGN SCHEMA を使用すると、フィールドマッピングは自動的に処理されます。

    • 構文例

      -- 方法 1
      CREATE FOREIGN TABLE [ IF NOT EXISTS ] oss_table_name (
        { column_name data_type }
        [, ... ]
      )
      SERVER SERVER_NAME
      OPTIONS
      (
        schema_name '<span class="var-span" contenteditable="true" data-var="DLF_DATABASE_NAME">DLF_DATABASE_NAME'</span>,
        table_name '<span class="var-span" contenteditable="true" data-var="DLF_TABLE_NAME">DLF_TABLE_NAME'</span>
      );
      
      -- 方法 2
      IMPORT FOREIGN SCHEMA schema_name
          [ { LIMIT TO | EXCEPT } ( table_name [, ...] ) ]
          FROM SERVER SERVER_NAME
          INTO local_schema
          [ OPTIONS ( option 'value' [, ... ] ) ]
    • パラメーターの説明

      パラメーター

      説明

      schema_name

      DLF 1.0 で作成されたメタデータベースの名前。

      table_name

      DLF 1.0 で作成されたメタデータテーブルの名前。

      SERVER_NAME

      Hologres で作成されたサーバーの名前。

      local_schema

      Hologres のスキーマ名。

      options

      IMPORT FOREIGN SCHEMA のオプション値。詳細については、「IMPORT FOREIGN SCHEMA」をご参照ください。

    • 使用例

      • 個別に作成

        DLF 1.0 メタデータベース dlfpro のメタデータテーブル dlf_oss_test からデータをマッピングする外部テーブルを作成します。テーブルは Hologres の public スキーマに存在します。外部テーブルが存在するかどうかを確認し、存在する場合は更新します。

        -- 方法 1
        CREATE FOREIGN TABLE dlf_oss_test_ext
        (
          id text,
          pt text
        )
        SERVER SERVER_NAME
        OPTIONS
        (
          schema_name 'dlfpro',
          table_name 'dlf_oss_test'
        );
        
        -- 方法 2
        IMPORT FOREIGN SCHEMA dlfpro LIMIT TO
        (
          dlf_oss_test
        )
        FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update');
      • 一括で作成

        DLF 1.0 メタデータベース dlfpro のすべてのテーブルを Hologres の public スキーマにマッピングします。これにより、一致する名前の外部テーブルが一括で作成されます。

        • データベース全体をインポート

          IMPORT FOREIGN SCHEMA dlfpro
          FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update');
        • 複数のテーブルをインポート

          IMPORT FOREIGN SCHEMA dlfpro
          (
            table1,
            table2,
            tablen
          )
          FROM SERVER SERVER_NAME INTO public options (if_table_exist 'update');
  2. データのクエリ

    外部テーブルが正常に作成された後、直接クエリを実行して OSS からデータを読み取ります。

    • 非パーティションテーブル

      SELECT * FROM dlf_oss_test;
    • パーティションテーブル

      SELECT * FROM partition_table WHERE dt = '2013';

次のステップ

よくある質問

DLF 1.0 外部テーブルを作成する際に、次のエラーが報告されます:ERROR: babysitter not ready,req:name:"HiveAccess"

  • 原因

    バックグラウンド構成が有効になっていません。

  • 解決策

    管理コンソールで [インスタンス] ページに移動し、Data Lake Acceleration をクリックしてバックグラウンド構成を有効にします。

チュートリアル

データレイクアクセラレーションクエリ