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

Hologres:Hive メタストア (HMS) を使用した OSS のデータレイクデータへのアクセス (ベータ版)

最終更新日:Feb 04, 2026

Hologres V2.2 以降、Hive メタストア (HMS) を使用して Object Storage Service (OSS) のデータレイクデータにアクセスできるようになりました。 E-MapReduce (EMR) クラスターを使用して OSS 上にデータレイクを構築している場合、Hologres を設定することで、OSS および OSS-HDFS データの読み書き操作を高速化できます。

前提条件

  • OSS が有効化されていること。 詳細については、「クイックスタート」をご参照ください。

  • EMR のデータレイククラスターを作成し、テストデータを作成していること。 詳細については、「クラスターの作成」をご参照ください。 EMR クラスターは、次の条件を満たす必要があります:

    • Hive のバージョンが 3.1.3 以降であること。

    • Kerberos 身元認証が無効になっていること。

    • メタデータ]について、[セルフマネージド RDS]または[組み込み MySQL]を選択しています。

  • Hologres インスタンスを購入し、データレイクアクセラレーションを有効にし、データベースを作成していること。 詳細については、「Hologres インスタンスの購入」および「データベースの作成」をご参照ください。

    説明

    データレイクアクセラレーションを有効にするには、Hologres インスタンスリストに移動します。対象のインスタンスのActions列で、Data Lake Accelerationをクリックして、選択を確認します。

  • ネットワーク接続が確立されていること。

    ネットワーク接続リクエストを送信します。 リクエストを受信後、Alibaba Cloud Hologres サポートチームがお客様に連絡し、ネットワーク接続を確立するための次の手順をサポートします:

    VPC コンソールにログインして、逆再生エンドポイントを作成します。 詳細については、「Alibaba Cloud サービスへのアクセス」をご参照ください。 Endpoint Service パラメーターには、[その他のエンドポイントサービス] を選択し、EMR クラスターが配置されているリージョンのエンドポイントサービスの名前を入力します。 各リージョンのエンドポイントサービス名は次のとおりです。

    リージョン

    エンドポイントサービス名

    北京

    com.aliyuncs.privatelink.cn-beijing.epsrv-2zeokrydzjd6kx3cbwmb

    上海

    com.aliyuncs.privatelink.cn-shanghai.epsrv-uf61fvlfwta7f7dv9n3x

    張家口

    com.aliyuncs.privatelink.cn-zhangjiakou.epsrv-8vbno4k4wwvys0eg2swp

    説明
    • ご利用のリージョンでエンドポイントサービス名が利用できない場合、ネットワーク接続リクエストを送信した後、Hologres チームがエンドポイントサービスを作成し、その名前を提供します。

    • Virtual Private Cloud (VPC) は、Alibaba Cloud 上に構築された分離されたネットワーク環境です。 VPC は相互に、またクラシックネットワークから論理的に分離されており、デフォルトでは通信できません。 Hologres サービスは VPC より前に作成されたため、クラシックネットワークにデプロイされています。 したがって、ネットワーク接続を確立するには、リバースエンドポイントを設定する必要があります。

    • 現在のネットワーク構成では、接続に IP アドレスを使用します。 EMR クラスターの IP アドレスが変更された場合は、接続を再設定する必要があります。

制限事項

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

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

  • 自動ロードを使用した HMS からの外部テーブルのマッピングはサポートされていません。

  • Kerberos 身元認証が有効になっている Hive クラスターはサポートされていません。

手順

  1. SQL コマンドを実行して拡張機能を作成します。

    拡張機能の作成にはスーパーユーザー権限が必要です。 この操作はデータベース全体に影響するため、データベースごとに 1 回だけ実行する必要があります。

    CREATE EXTENSION IF NOT EXISTS hive_fdw;
  2. hive_fdw に基づいて外部サーバーを作成し、エンドポイント情報を構成します。

    CREATE SERVER IF NOT EXISTS <server_name> FOREIGN DATA WRAPPER hive_fdw 
    OPTIONS (
       hive_metastore_uris 'thrift://<IP address of Hive Metastore>:<port number>',
       oss_endpoint 'oss-<nation>-<region>-internal.aliyuncs.com | <bucket>.oss-<nation>-<region>.oss-dls.aliyuncs.com' 
    );

    パラメータ

    必須

    説明

    server_name

    はい

    外部サーバーのカスタム名。

    hive_server

    hive_metastore_uris

    はい

    Hive メタストアの URI。 フォーマットは thrift://<Hive メタストアの IP アドレス>:<ポート番号> です。 デフォルトのポート番号は 9083 です。

    説明

    E-MapReduce コンソールにログインします。 対象のクラスターのActions列で、[ノード管理]をクリックします。 [ノード管理]タブで、マスターノードの[内部 IP]を見つけます。 この IP アドレスが Hive メタストアの IP アドレスです。

    thrift://172.16.0.250:9083

    oss_endpoint

    はい

    OSS のエンドポイント。 ビジネスニーズに応じて、次のいずれかを選択します:

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

    • OSS-HDFS ストレージ:内部ネットワークアクセスのみがサポートされています。

    説明

    OSS コンソールにログインします。バケットの概要ページに移動します。[アクセスポート] エリアで、OSS エンドポイントアドレスを確認します。

    • OSS

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

      <bucket_name>.cn-beijing.oss-dls.aliyuncs.com
  3. (オプション) ユーザーマッピングを作成します。

    Hologres では、CREATE USER MAPPING コマンドを使用して、ユーザーを特定の外部サーバーにマッピングできます。 たとえば、外部サーバーのオーナーは CREATE USER MAPPING を使用して、Resource Access Management (RAM) ユーザー (123xxx) が OSS の外部データにアクセスすることを許可できます。 CREATE USER MAPPING の詳細については、PostgreSQL ドキュメントをご参照ください。

    CREATE USER mapping FOR <account> server <server_name> options
    (
        dlf_access_id '<yourAccessKeyId>', 
        dlf_access_key '<yourAccessKeySecret>',
        oss_access_id '<yourAccessKeyId>', 
        oss_access_key '<yourAccessKeySecret>'
    );

    以下に例を示します:

    -- 現在のユーザーのユーザーマッピングを作成
    CREATE USER mapping FOR current_user server <server_name> options
    (
        dlf_access_id 'yourAccessKeyId', 
        dlf_access_key 'yourAccessKeySecret',
        oss_access_id 'yourAccessKeyId', 
        oss_access_key 'yourAccessKeySecret'
    );
    
    -- RAM ユーザー 123xxx のユーザーマッピングを作成
    CREATE USER mapping FOR "p4_123xxx" server <server_name> options
    (
        dlf_access_id 'yourAccessKeyId', 
        dlf_access_key 'yourAccessKeySecret',
        oss_access_id 'yourAccessKeyId', 
        oss_access_key 'yourAccessKeySecret'
    );
    
    -- ユーザーマッピングを削除
    Drop USER MAPPING FOR CURRENT_USER server <server_name>;
    Drop USER MAPPING FOR "p4_123xxx" server <server_name>;
  4. 外部テーブルを作成します。

    Hologres は、外部テーブルを作成するために次のコマンドをサポートしています:

    • CREATE FOREIGN TABLE:単一の外部テーブルを作成します。 このコマンドでは、列のサブセットを指定してテーブルをカスタマイズできます。 少数の外部テーブルを作成する必要がある場合や、すべてのフィールドをマッピングする必要がないシナリオに適しています。

    • IMPORT FOREIGN SCHEMA:外部テーブルをバッチで作成します。 このコマンドは、複数の外部テーブルを作成する必要がある場合や、外部データソースからバッチマッピングを実行する必要があるシナリオに適しています。

    説明
    • Hologres は、OSS のパーティションテーブルの読み取りをサポートしています。 パーティションキーでサポートされているデータの型は、TEXT、VARCHAR、INT です。 CREATE FOREIGN TABLE を使用する場合、このコマンドはスキーマをマッピングするだけでデータを保存しないため、パーティションフィールドを通常のフィールドとして定義できます。 IMPORT FOREIGN SCHEMA を使用する場合、システムが自動的にフィールドマッピングを処理するため、テーブルフィールドを定義する必要はありません。

    • 外部スキーマ内のテーブルが Hologres の既存の内部テーブルと同じ名前を持つ場合、IMPORT FOREIGN SCHEMA はその外部テーブルの作成をスキップします。 この場合、CREATE FOREIGN TABLE を使用して、外部テーブルに一意の名前を定義します。

    -- CREATE FOREIGN TABLE を使用
    CREATE FOREIGN TABLE <holo_schema_name>.<table_name>
    (
      { column_name data_type }
      [, ... ]
      ] )
    )
    SERVER <hive_server_name>
    OPTIONS
    (
      schema_name '<ext_db_name>',
      table_name '<ext_table_name>'
    );
    
    
    -- IMPORT FOREIGN SCHEMA を使用
    IMPORT FOREIGN SCHEMA <ext_db_name> 
    [
      { limit TO | EXCEPT } 
      ( table_name [, ...] ) 
    ]
    FROM server <hive_server_name>
    INTO <holo_schema_name> 
    options(
      if_table_exist 'update',
      if_unsupported_type 'error'
            );
  5. 外部テーブルをクエリします。

    外部テーブルが作成されたら、直接クエリして OSS からデータを読み取ることができます。

    • パーティション化されていないテーブル

      SELECT * FROM <holo_schema>.<hive_table>;
    • パーティションテーブル

      SELECT * FROM <holo_schema>.<hive_partition_table> WHERE <partition_key> = '<partition_value>';