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

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

最終更新日:Aug 26, 2026

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

背景情報

ビジネスのデジタルトランスフォーメーションが深化するにつれてデータ量は急速に増大しており、コスト、規模、データの多様性の観点から、従来のデータ分析に課題をもたらしています。Hologres は、DLF と OSS を組み合わせることで、レイクハウスアーキテクチャに基づいたデータレイク高速化サービスを提供します。このアーキテクチャは、大規模データセットの低コストなストレージ、統合メタデータ管理、効率的なデータ分析が可能です。

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

次の表に、リアルタイムデータレイクソリューションで使用される Alibaba Cloud サービスの一覧を示します。

サービス

説明

関連リンク

Data Lake Formation (DLF)

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

DLF とは

Object Storage Service (OSS)

DLF は、クラウドベースのデータレイクの統合ストレージとして OSS を使用します。OSS は、安全でコスト効率が高く、信頼性の高いクラウドストレージサービスであり、あらゆるタイプのデータを大量に保存できます。99.9999999999% (トゥエルブナイン) のデータ耐久性を提供し、データレイクストレージの事実上の標準となっています。

OSS とは

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

OSS-HDFS サービスとは

注意事項

Hologres 共有クラスターはデータを保存せず、外部テーブルを使用してのみ OSS データレイクのクエリを実行できます。

前提条件

本トピックでは、中国 (上海) リージョンを例として、OSS、DLF、Hologres サービスを有効化する方法を説明します。

  1. OSS を有効化し、テストデータを準備します。

    1. OSS 有効化ページに移動し、画面の指示に従ってサービスを有効化します。

      説明

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

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

    3. tpch_10g_orc_3.zip テストデータをダウンロードし、バケット内の tpch_10g_orc_3/ ディレクトリにアップロードします。

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

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

  2. DLF を有効化し、OSS テストデータをインポートします。

    1. DLF 有効化ページに移動します。。

    2. DLF コンソールにログインします。メタデータ管理 ページで、データベースの作成 をクリックします。詳細については、「データベース、テーブル、関数の管理」をご参照ください。

      本トピックでは、mydatabase データベースを作成する例を示します。

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

      ジョブが完了すると、[Data Tables] タブの メタデータ管理 ページにテーブルが表示されます。

      データテーブルのリストには、nation_orc、partsupp_orc、supplier_orc の 3 つの ORC テーブルが表示されます。

  3. Hologres を有効化し、Hologres インスタンスを購入します。詳細については、「Hologres インスタンスの購入」をご参照ください。

    説明

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

ステップ1:環境の設定

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

    Hologres インスタンスページに移動します。対象インスタンスの 操作 列で、データレイクアクセラレーション をクリックして操作を確定します。この機能を有効にすると、Hologres インスタンスが再起動されます。

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

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

    説明

    この操作は Hologres V2.1 以降では不要です。拡張機能はデフォルトで作成されるためです。Hologres インスタンスページに移動し、インスタンスの詳細 ページでインスタンスのバージョンを確認できます。

    CREATE EXTENSION IF NOT EXISTS dlf_fdw;
    説明

    このステートメントをスーパーユーザーとして HoloWeb の SQL Editor で実行して、拡張機能を作成してください。この操作はデータベース全体に適用され、データベースごとに 1 回だけ実行する必要があります。Hologres アカウントに権限を付与する方法の詳細については、「ユーザー権限の管理」をご参照ください。

  4. 次のステートメントを実行して、dlf_server 外部サーバーを作成し、Endpoint 情報を設定して、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:外部テーブルを使用した OSS データレイクのクエリ

Hologres の外部テーブルは、OSS データレイク内のデータへのマッピングを保存します。データは OSS データレイク内に残り、Hologres のストレージ容量を消費しません。クエリは通常、数秒から数分で完了します。

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

    -- 本トピックでは 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. データをクエリします。

    例:

    -- TPC-H 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 (オプション):内部テーブルを使用したクエリ

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 の内部テーブルのデータをクエリします。

    -- TPC-H 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 インスタンスページに移動します。対象インスタンスの 操作 列で データレイクアクセラレーション をクリックし、プロンプトに従って機能を有効にしてください。

関連ドキュメント

本トピックはチュートリアルです。OSS ベースのデータレイクにおけるクエリ高速化に関する包括的な情報については、「DLF を使用した OSS ベースのデータレイクでのクエリ高速化」をご参照ください。