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

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

最終更新日:Feb 04, 2026

Hologres データレイク高速化サービスは、Alibaba Cloud Data Lake Formation (DLF) と Object Storage Service (OSS) 上に構築されています。柔軟なデータアクセス、分析、効率的なデータ処理機能を提供し、OSS データレイクのクエリと分析を大幅に高速化します。

背景情報

デジタルトランスフォーメーションの加速に伴い、データ量は急増しており、コスト、規模、データの多様性の面で従来のデータ分析に大きな課題をもたらしています。Hologres は、DLF および OSS と連携して、データレイク高速化のためのデータレイクハウスアーキテクチャを提供します。このアーキテクチャにより、企業は大量データの低コストストレージ、統合メタデータ管理、効率的なデータ分析とインサイトの獲得を実現できます。

Hologres は DLF および OSS とシームレスに統合されます。外部テーブルを使用することで、データを移動することなく、OSS に保存されている Hudi、Delta、Paimon、ORC、Parquet、CSV、SequenceFile などのフォーマットのデータに対する読み書き操作を直接高速化できます。外部テーブルはフィールドをマッピングするだけで、データは保存しません。これにより、開発と運用保守のコストが削減され、データサイロが解消され、ビジネスインサイトの獲得が可能になります。Hologres は、専用型インスタンス (排他的リソース) と共有サーバーレスクラスター (従量課金) の 2 つのモードをサポートしています。詳細については、「Hologres インスタンスの購入」をご参照ください。

次の表に、リアルタイムデータレイクソリューションに関連する Alibaba Cloud サービスを示します。

サービス

説明

関連リンク

Alibaba Cloud Data Lake Formation (DLF)

クラウド上にデータレイクやデータレイクハウスを迅速に構築するのに役立つフルマネージドサービスです。DLF は、クラウドデータレイクに対して、統合メタデータ管理、統合された権限とセキュリティ管理、便利なデータインジェスト、ワンクリックでのデータ探索を提供します。

DLF 製品概要

Alibaba Cloud Object Storage Service (OSS)

DLF は、クラウドデータレイクの統合ストレージとして OSS を使用します。OSS は、あらゆる種類のファイルの保存に適した、大規模で安全、低コスト、高信頼性のクラウドストレージサービスです。99.9999999999% (トゥエルブナイン) のデータ耐久性を提供し、データレイクストレージのデファクトスタンダードとなっています。

Object Storage Service (OSS) とは

JindoFS とも呼ばれる OSS-HDFS サービスは、クラウドネイティブなデータレイクストレージソリューションです。ネイティブの OSS ストレージと比較して、OSS-HDFS は Hadoop エコシステムのコンピュートエンジンとシームレスに統合され、Hive と Spark を使用する典型的なオフラインの抽出・変換・書き出し (ETL) シナリオでより優れたパフォーマンスを発揮します。Hadoop 分散ファイルシステム (HDFS) インターフェイスと完全に互換性があり、完全な POSIX サポートを提供するため、ビッグデータや AI におけるデータレイクコンピューティングシナリオのニーズをより満たすことができます。

OSS-HDFS サービスとは

注意事項

Hologres 共有クラスターはデータを保存しません。外部テーブルを使用した OSS データレイクのクエリのみをサポートします。

事前準備

このトピックでは、中国 (上海) リージョンを例に、OSS、DLF、Hologres をアクティベートする方法を説明します。

  1. OSS をアクティベートし、テストデータを準備します。

    1. OSS アクティベーションページに移動し、画面の指示に従ってサービスをアクティベートします。

      説明

      OSS サービスを有効化すると、デフォルトの課金方法は従量課金になります。OSS の利用コストを削減するには、リソースプランの購入を推奨します。

    2. OSS コンソールにログインし、バケットを作成します。詳細については、「コンソールでのクイックスタート」をご参照ください。

    3. tpch_10g_orc_3.zip テストデータをバケット内のフォルダーにアップロードします。image.png

      説明
      • テストデータファイルをアップロードした後、.DS_Store などのファイルは手動で削除してください。

      • ダウンロードを高速化するため、このパッケージには、このトピックで必要な nation_orc、supplier_orc、partsupp_orc のデータテーブルのみが含まれています。

  2. DLF をアクティベートし、OSS テストデータをインポートします。

    1. DLF アクティベーションページに移動します。

    2. Data Lake Formation コンソールにログインします。Metadata Management ページで、Create Database をクリックします。詳細については、「データベース、テーブル、関数」をご参照ください。

      このトピックでは、mydatabase という名前のデータベースを作成する例を示します。

    3. [メタデータクロール] ページで、メタデータクロールジョブを作成して OSS テストデータをインポートします。詳細については、「メタデータクロール」をご参照ください。

      ジョブが完了すると、Metadata Management ページの [テーブル] タブでデータを確認できます。

      image.png

  3. Hologres をアクティベートし、Hologres インスタンスを購入します。詳細については、「Hologres インスタンスの購入」をご参照ください。

    説明

    新規ユーザーの場合は、Alibaba Cloud 無料トライアルページで Hologres の無料トライアルを申請できます。

ステップ 1:環境の設定

  1. ご利用の Hologres インスタンスでデータレイク高速化機能を有効にします。

    Hologres インスタンスリストに移動します。対象インスタンスの Actions 列で、Data Lake Acceleration をクリックして操作を確定します。この機能を有効にすると、Hologres インスタンスが再起動します。

  2. Hologres インスタンスにログインし、データベースを作成します。詳細については、「HoloWeb に接続してクエリを実行」をご参照ください。

  3. (オプション) 拡張機能を作成します。このトピックでは、dlf_fdw を例として使用します。

    説明

    この拡張機能は Hologres V2.1 以降ではデフォルトで作成されるため、この操作を実行する必要はありません。Hologres インスタンスリストに移動し、Instance Details ページでインスタンスのバージョンを確認できます。

    CREATE EXTENSION IF NOT EXISTS dlf_fdw;
    説明

    上記の文をスーパーユーザーとして HoloWeb の SQL エディターで実行し、拡張機能を作成します。この操作はデータベース全体に適用され、各データベースで一度だけ実行する必要があります。Hologres アカウントに権限を付与する方法の詳細については、「サービスアカウントへの権限付与」をご参照ください。

  4. 次の文を実行して、dlf_server という名前の外部サーバーを作成し、そのエンドポイント情報を設定します。これにより、Hologres、DLF、OSS 間の正常なアクセスが保証されます。外部サーバーの作成方法とそのパラメーターの詳細については、「外部サーバーの作成」をご参照ください。

    -- 外部サーバーを作成します。中国 (上海) リージョンを例として使用します。
    CREATE SERVER IF NOT EXISTS dlf_server FOREIGN data wrapper dlf_fdw options (
        dlf_region 'cn-shanghai',
        dlf_endpoint 'dlf-share.cn-shanghai.aliyuncs.com',
        oss_endpoint 'oss-cn-shanghai-internal.aliyuncs.com'); 

ステップ 2:Hologres 外部テーブルを使用した OSS データレイクのクエリ

Hologres 外部テーブルには、OSS データレイク内のデータへのマッピングが保存されます。データ自体は OSS データレイクに保存され、Hologres のストレージ領域を占有しません。クエリのパフォーマンスは通常、数秒から数分です。

  1. Hologres 外部テーブルを作成し、OSS データレイクのデータをマッピングします。

    -- このトピックでは mydatabase を例として使用します。スキーマを作成する際は、mydatabase を DLF メタデータ管理でのお客様のカスタムデータベース名に置き換えてください。
    IMPORT FOREIGN SCHEMA mydatabase LIMIT TO 
    (
      nation_orc,
      supplier_orc,
      partsupp_orc
    )
    FROM SERVER dlf_server INTO public options (if_table_exist 'update');
  2. データをクエリします。

    外部テーブルが作成された後、直接クエリを実行して OSS からデータを読み取ることができます。以下はサンプル文です。

    -- TPCH Q11 クエリ文
    select
            ps_partkey,
            sum(ps_supplycost * ps_availqty) as value
    from
            partsupp_orc,
            supplier_orc,
            nation_orc
    where
            ps_suppkey = s_suppkey
            and s_nationkey = n_nationkey
            and RTRIM(n_name) = 'EGYPT'
    group by
            ps_partkey having
                    sum(ps_supplycost * ps_availqty) > (
                            select
                                    sum(ps_supplycost * ps_availqty) * 0.000001
                            from
                                    partsupp_orc,
                                    supplier_orc,
                                    nation_orc
                            where
                                    ps_suppkey = s_suppkey
                                    and s_nationkey = n_nationkey
                                    and RTRIM(n_name) = 'EGYPT'
                    )
    order by
            value desc;

ステップ 3:(オプション) Hologres 内部テーブルを使用した OSS データレイクのクエリ

Hologres 内部テーブルを使用してデータをクエリするには、OSS データレイクから Hologres にデータをインポートする必要があります。データは Hologres に保存され、より優れたクエリパフォーマンスと高いデータ処理能力を提供します。ストレージ料金の詳細については、「課金の概要」をご参照ください。

  1. Hologres で、外部テーブルと同じスキーマを持つ内部テーブルを作成します。以下は例です。

    -- nation テーブルを作成
    DROP TABLE IF EXISTS NATION;
    
    BEGIN;
    CREATE TABLE NATION (
        N_NATIONKEY int NOT NULL PRIMARY KEY,
        N_NAME text NOT NULL,
        N_REGIONKEY int NOT NULL,
        N_COMMENT text NOT NULL
    );
    CALL set_table_property ('NATION', 'distribution_key', 'N_NATIONKEY');
    CALL set_table_property ('NATION', 'bitmap_columns', '');
    CALL set_table_property ('NATION', 'dictionary_encoding_columns', '');
    COMMIT;
    
    -- supplier テーブルを作成
    DROP TABLE IF EXISTS SUPPLIER;
    
    BEGIN;
    CREATE TABLE SUPPLIER (
        S_SUPPKEY int NOT NULL PRIMARY KEY,
        S_NAME text NOT NULL,
        S_ADDRESS text NOT NULL,
        S_NATIONKEY int NOT NULL,
        S_PHONE text NOT NULL,
        S_ACCTBAL DECIMAL(15, 2) NOT NULL,
        S_COMMENT text NOT NULL
    );
    CALL set_table_property ('SUPPLIER', 'distribution_key', 'S_SUPPKEY');
    CALL set_table_property ('SUPPLIER', 'bitmap_columns', 'S_NATIONKEY');
    CALL set_table_property ('SUPPLIER', 'dictionary_encoding_columns', '');
    COMMIT;
    
    -- partsupp テーブルを作成
    DROP TABLE IF EXISTS PARTSUPP;
    
    BEGIN;
    CREATE TABLE PARTSUPP (
        PS_PARTKEY int NOT NULL,
        PS_SUPPKEY int NOT NULL,
        PS_AVAILQTY int NOT NULL,
        PS_SUPPLYCOST DECIMAL(15, 2) NOT NULL,
        PS_COMMENT text NOT NULL,
        PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY)
    );
    CALL set_table_property ('PARTSUPP', 'distribution_key', 'PS_PARTKEY');
    CALL set_table_property ('PARTSUPP', 'bitmap_columns', 'ps_availqty');
    CALL set_table_property ('PARTSUPP', 'dictionary_encoding_columns', '');
    COMMIT;
  2. Hologres 外部テーブルから Hologres 内部テーブルにデータを同期します。

    --- Hologres 外部テーブルから内部テーブルにデータをインポートします。
    INSERT INTO nation SELECT * FROM nation_orc;
    INSERT INTO supplier SELECT * FROM supplier_orc;
    INSERT INTO partsupp SELECT * FROM partsupp_orc;
  3. Hologres 内部テーブルのデータをクエリします。

    -- TPCH Q11 クエリ文
    select
            ps_partkey,
            sum(ps_supplycost * ps_availqty) as value
    from
            partsupp,
            supplier,
            nation
    where
            ps_suppkey = s_suppkey
            and s_nationkey = n_nationkey
            and RTRIM(n_name) = 'EGYPT'
    group by
            ps_partkey having
                    sum(ps_supplycost * ps_availqty) > (
                            select
                                    sum(ps_supplycost * ps_availqty) * 0.000001
                            from
                                    partsupp,
                                    supplier,
                                    nation
                            where
                                    ps_suppkey = s_suppkey
                                    and s_nationkey = n_nationkey
                                    and RTRIM(n_name) = 'EGYPT'
                    )
    order by
            value desc;

よくある質問

Hologres 外部テーブルを作成すると、エラーメッセージ ERROR: babysitter not ready,req:name:"HiveAccess" が返されます。

  • 原因:データレイク高速化機能が有効になっていません。

  • 解決策:Hologres インスタンスリストに移動します。対象インスタンスの Actions 列で、Data Lake Acceleration をクリックして操作を確定し、機能を有効にします。

参考資料

上記の内容はチュートリアルの例です。データレイク機能の完全な説明については、「DLF に基づく OSS データレイクへのアクセスの高速化」をご参照ください。