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

Hologres:OSS データレイクの高速化

最終更新日:Feb 14, 2026

Alibaba Cloud Data Lake Formation (DLF) および Object Storage Service (OSS) を基盤とする Hologres のデータレイク高速化機能は、柔軟なデータアクセス・分析機能と効率的なデータ処理を提供します。これにより、OSS データレイクに格納されたデータのクエリおよび分析が大幅に高速化されます。本トピックでは、Hologres で DLF 1.0 を使用して OSS データを読み書きする方法について説明します。

前提条件

  • 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 などのコマンドはサポートされません。

  • データを OSS へ書き戻す機能は、Hologres V1.3 以降でのみサポートされており、ORC、Parquet、CSV、SequenceFile 形式のファイルのみが対応しています。

  • 読み取り専用のセカンダリインスタンスでは、データレイク高速化機能はサポートされません。

  • IMPORT FOREIGN SCHEMA 文は、OSS に格納されたパーティションテーブルのインポートをサポートしています。Hologres では、現在 1 回のクエリで最大 512 パーティションまでクエリ可能です。各クエリで 512 パーティションを超えないよう、パーティションフィルター条件を追加してください。

  • レイクデータのクエリは、外部テーブルの特定のクエリパーティションを実行時に Hologres のメモリおよびキャッシュにロードして計算を行う仕組みです。クエリパフォーマンスを維持するため、Hologres では 1 回のクエリにおけるデータ量を 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. 拡張機能を作成します。

    Superuser がデータベース内で以下の文を実行して拡張機能を作成することで、DLF 1.0 を介した OSS データの読み取りが可能になります。この操作はデータベース全体に適用され、データベースごとに 1 回だけ実行する必要があります。

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

    重要

    外部サーバーを作成するには Superuser アカウントを使用する必要があります。それ以外の場合、権限エラーが発生します。

    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 コンソールで OSS-HDFS が有効化されたバケットの「概要」ページに表示されます。

        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 '<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 '<span class="var-span" contenteditable="true" data-var="BUCKET_NAME">BUCKET_NAME.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 の外部データにアクセスできるようにできます。

    指定したアカウントが対応する外部データのクエリ権限を有していることを確認してください。詳細については、「PostgreSQL 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 'DLF_DATABASE_NAME',
        table_name 'DLF_TABLE_NAME'
      );
      
      -- 方法 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 スキーマにマップします。これにより、dlfpro と同じ名前の複数の外部テーブルが Hologres に作成されます。

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

          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 をクリックしてバックエンド構成を有効化します。

チュートリアル

データレイククエリの高速化