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

Hologres:DLF を使用した OSS-HDFS データへのアクセス

最終更新日:Mar 11, 2026

Hologres のバージョン 1.3.26 以降では、Object Storage Service (OSS)-HDFS からのデータ読み取りおよび OSS-HDFS へのデータ書き込みがサポートされます。本トピックでは、Data Lake Formation (DLF) を使用して OSS-HDFS データレイク内のデータにアクセスする方法について説明します。

背景情報

OSS-HDFS(JindoFS)は、クラウドネイティブなデータレイクストレージサービスです。ネイティブの OSS と比較して、OSS-HDFS は Hadoop エコシステム内のコンピュートエンジンとシームレスに統合されます。これにより、Hive や Spark を使用する典型的なオフライン抽出・変換・書き出し(ETL)シナリオにおいて、より優れたアクセスパフォーマンスを実現します。OSS-HDFS の詳細については、「OSS-HDFS サービスとは?」をご参照ください。OSS-HDFS に格納されたデータに対しては、Hologres がメタデータ管理に DLF を、直接のデータ読み取りおよび書き戻しに JindoSDK を使用します。現在、書き戻しは ORC、Parquet、CSV、SequenceFile 形式のテーブルのみでサポートされています。DLF を使用した OSS へのデータ読み取りおよび書き込みの詳細については、「DLF を使用した OSS データレイクへのアクセスの高速化」をご参照ください。

前提条件

  • DLF を有効化済みであること。詳細については、「クイックスタート」をご参照ください。対応リージョンの一覧については、「リージョンとエンドポイント」をご参照ください。

  • OSS-HDFS を有効化し、データを準備済みであること。詳細については、「OSS-HDFS サービスの有効化」をご参照ください。

  • Hologres インスタンスでデータレイクアクセラレーション機能を有効化済みであること。詳細については、「環境構成」をご参照ください。

注意事項

  1. OSS-HDFS バケットのドメイン名を確認します。

    OSS-HDFS のサービスタイプのドメイン名を Hologres で設定する必要があります。このドメイン名は、OSS コンソールのバケットの [概要] ページで確認できます。なお、対象のバケットに対して OSS-HDFS サービスが有効化されている必要があります。

    image

  2. 外部サーバーを作成および構成します。

    重要

    複数の OSS-HDFS 環境から同時にデータにアクセスする場合は、それぞれの環境に対応する複数の外部サーバーを構成する必要があります。たとえば、OSS-HDFS に格納されている外部テーブルにアクセスするには、個別の外部サーバーを作成する必要があります。oss_endpoint パラメーターには、OSS-HDFS のエンドポイントを指定します。外部テーブルのインポートまたは作成時に、この外部サーバーを指定します。同様に、OSS に格納されているデータテーブルにアクセスする場合も、個別の外部サーバーを作成し、対応する OSS ドメイン名を構成する必要があります。

    バケットのドメイン名を確認後、Hologres で DLF および OSS のエンドポイントを構成できます。構文は以下のとおりです:

    CREATE EXTENSION IF NOT EXISTS dlf_fdw;
    
    CREATE SERVER IF NOT EXISTS <servername> FOREIGN data wrapper dlf_fdw options (
        dlf_region 'cn-<region>',
        dlf_endpoint 'dlf-share.cn-<region>.aliyuncs.com',
        oss_endpoint '<bucket_name>.cn-<region>.oss-dls.aliyuncs.com' -- OSS-HDFS バケットのドメイン名
    );

    パラメーターの説明:

    パラメーター名

    説明

    servername

    サーバーのカスタム名です。

    dlf_server

    dlf_region

    DLF が配置されているリージョンです。必要に応じてリージョンを選択してください。

    対応リージョンの一覧については、「リージョンとエンドポイント」をご参照ください。

    cn-beijing

    dlf_endpoint

    • より高いアクセスパフォーマンスを得るためには、DLF のプライベートサービスエンドポイントを使用してください。対応リージョンの一覧については、「リージョンとエンドポイント」をご参照ください。

    • クロスリージョンアクセスを行う場合は、パブリックエンドポイントを使用してください。

      重要

      パブリックエンドポイントを使用するとネットワーク料金が発生し、パフォーマンスが低下する可能性があります。ネットワーク料金の詳細については、「課金概要」をご参照ください。

    dlf-share.cn-beijing.aliyuncs.com

    oss_endpoint

    手順 1 で確認した OSS-HDFS のエンドポイントです。OSS-HDFS は現在、プライベートネットワークアクセスのみをサポートしています。つまり、デフォルトではクロスリージョンアクセスはサポートされていません。

    説明

    ネイティブの OSS ストレージを利用する場合は、より高いアクセスパフォーマンスを得るために OSS のプライベートエンドポイントを使用してください。Hologres および DLF とのクロスリージョン連携を行う場合は、パブリックエンドポイントを使用してください。詳細については、「IPv6 による OSS へのアクセス」をご参照ください。

    bucket_nametest.cn-hangzhou.oss-dls.aliyuncs.com
  3. OSS-HDFS からのデータ読み取りおよび書き込み用に外部テーブルを作成します。

    • 単一テーブルの作成:DLF のメタデータベース dlfpro 内のメタデータテーブル dlf_oss_test をマップする外部テーブルを作成できます。この外部テーブルは、Hologres の public スキーマ内に作成されます。

      -- 方法 1
      CREATE FOREIGN TABLE dlf_oss_test
      (
        id text,
        pt text
      )
      SERVER dlf_server -- 作成済みの外部サーバー
      options
      (
        schema_name 'dlfpro',
        table_name 'dlf_oss_test'
      );
      
      
      -- 方法 2:
      IMPORT FOREIGN SCHEMA dlfpro LIMIT TO
      (
        dlf_oss_test
      )
      FROM SERVER dlf_server INTO public options (if_table_exist 'update');
    • 複数テーブルの作成:DLF のメタデータベース dlfpro に含まれるすべてのテーブルを、Hologres の public スキーマにマップできます。この操作により、対応する外部テーブルが Hologres に一括で作成されます。

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

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

        IMPORT FOREIGN SCHEMA dlfpro
        (
          table1,
          table2,
          tablen
        )
        FROM SERVER dlf_server INTO public options (if_table_exist 'update');
  4. データをクエリします。

    外部テーブルを作成後、Hologres の対応するスキーマ内、または HoloWeb の [テーブルスキーマ] フォルダ内に表示されます。外部テーブルをクエリすることで OSS からデータを読み取ることができます。また、CSV、Parquet、ORC 形式の外部テーブルにはデータを書き戻すことも可能です。

    • 非パーティション化テーブルのクエリ

      SELECT * FROM dlf_oss_test;
    • パーティションテーブルのクエリ

      SELECT * FROM <partition_table> WHERE dt = '2013';

手順の詳細については、「操作手順」をご参照ください。