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

Hologres:データレイクのデータに対するクエリの高速化

最終更新日:Jan 11, 2025

Hologres は、Data Lake Formation(DLF)および Object Storage Service(OSS)と連携して、データレイク高速化サービスを提供します。このサービスは、柔軟なデータアクセスと分析をサポートし、効率的なデータ処理機能を提供します。これにより、OSS データレイクのデータに対するクエリと分析が大幅に高速化されます。

背景情報

企業のデジタルトランスフォーメーションの発展に伴い、データ量は指数関数的に増加しています。従来のデータ分析は、コスト、データ量、データの多様性の点で大きな課題に直面しています。Hologres は、DLF および OSS と連携して、データレイクハウスアーキテクチャに基づくデータレイク高速化サービスを提供します。このサービスは、企業が大規模なデータの費用対効果の高いストレージ、メタデータの一元管理、効率的なデータ分析とデータインサイトを実現するのに役立ちます。

Hologres は、DLF および OSS とシームレスに統合されており、外部テーブルを使用して OSS のデータの読み取りと書き込みを直接高速化します。外部テーブルは、データを格納するのではなく、フィールドをマッピングするために使用されます。サポートされているデータ形式は、Apache Hudi、Delta Lake、Paimon、ORC、Parquet、CSV、および SequenceFile です。これにより、データ移行の必要がなくなり、開発と運用保守のコストが削減され、データサイロが解消され、ビジネスインサイトが得られます。Hologres インスタンスには、Hologres 専用インスタンスと従量課金制の Hologres Shared Cluster インスタンスの 2 種類があります。詳細については、「Hologres インスタンスの購入」をご参照ください。

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

サービス

説明

参照

DLF

Alibaba Cloud DLF は、クラウドでデータレイクとデータレイクハウスを構築するのに役立つフルマネージドサービスです。DLF は、クラウド内のデータレイクに対して、メタデータの一元管理、権限とセキュリティの一元管理、便利なデータ取り込みと探索機能を提供します。

Data Lake Formation とは

OSS

DLF は、クラウドデータレイクの統合ストレージとして OSS を使用します。OSS は、大量のデータとあらゆる種類のファイルを保存できる、安全で費用対効果が高く、信頼性の高いサービスです。OSS は 99.9999999999% のデータ耐久性を提供でき、データレイクストレージの事実上の標準となっています。

OSS とは

OSS-HDFS(JindoFS)は、クラウドネイティブのデータレイクストレージサービスです。OSS-HDFS は、Hadoop エコシステムのコンピューティングエンジンとシームレスに統合されており、Hive および Spark に基づくビッグデータのオフライン抽出、変換、ロード(ETL)において、ネイティブ OSS よりも優れたパフォーマンスを提供します。OSS-HDFS は、Hadoop Distributed File System(HDFS)API と完全に互換性があり、Portable Operating System Interface(POSIX)をサポートしています。OSS-HDFS を使用して、ビッグデータおよび AI 分野のデータレイクベースのコンピューティングシナリオでデータを管理できます。

OSS-HDFS とは

使用上の注意

Hologres Shared Cluster インスタンスはデータを保存しません。Hologres Shared Cluster インスタンスを使用する場合、外部テーブルを使用して OSS データレイクからデータを読み取ることができますが、OSS データレイクにデータを書き込むことはできません。

準備

この例では、OSS、DLF、および Hologres は中国(上海)リージョンでアクティブ化されています。

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

    1. OSS アクティベーションページで、画面の指示に従って OSS をアクティブ化します。

      説明

      OSS がアクティブ化されると、デフォルトで従量課金制の課金方法が使用されます。OSS 料金を削減する場合は、OSS リソースプランを購入することをお勧めします。

    2. OSS コンソールにログインし、OSS バケットを作成します。詳細については、「OSS コンソールを使用した作業の開始」をご参照ください。

    3. テストデータファイル tpch_10g_orc_3.zip をダウンロードし、作成した OSS バケットにアップロードします。image.png

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

      • テストデータには、ダウンロード時間を短縮するために、nation_orc、supplier_orc、および partsupp_orc ファイルのみが含まれています。

  2. DLF をアクティブ化し、OSS から DLF にテストデータをインポートします。

    1. 製品ホームページにアクセスして、DLF をアクティブ化します。

    2. DLF コンソールにログインします。左側のナビゲーションペインで、[メタデータ] > [メタデータ] を選択します。表示されるページの [データベース] タブで、[データベースの作成] をクリックします。次に、パラメータを設定し、[OK] をクリックします。詳細については、「メタデータ管理」トピックの「データベーステーブルと関数」をご参照ください。

      この例では、mydatabase データベースが作成されます。

    3. [メタデータディスカバリ] ページで、メタデータ抽出タスクを作成して、OSS から DLF にテストデータをインポートします。詳細については、「メタデータディスカバリ」をご参照ください。

      メタデータが抽出されると、[テーブル] タブの [メタデータ] ページでメタデータを表示できます。

      image.png

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

    説明

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

ステップ 1. 環境を設定する

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

    Hologres コンソールの [インスタンス] ページに移動します。目的のインスタンスを見つけて、[アクション] 列の [データレイク高速化] をクリックします。表示されるメッセージで、[有効にする] をクリックします。データレイク高速化が有効になると、Hologres インスタンスが再起動されます。

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

  3. オプション。拡張機能をインストールします。この例では、拡張機能 dlf_fdw がインストールされています。

    説明

    V2.1 以降の Hologres インスタンスでは、拡張機能が自動的にインストールされます。Hologres インスタンスのバージョンを確認するには、[インスタンス] ページに移動し、インスタンスをクリックして [インスタンスの詳細] ページに移動します。

    CREATE EXTENSION IF NOT EXISTS dlf_fdw;
    説明

    HoloWeb コンソールの SQL エディター タブで、スーパーユーザーとして上記ステートメントを実行して拡張機能をインストールします。拡張機能はデータベースレベルでインストールされます。各データベースでは、拡張機能を 1 回だけインストールする必要があります。Hologres のアカウント認証の詳細については、「サービスアカウントに権限を付与する」をご参照ください。

  4. dlf_server という名前の外部サーバーを作成し、DLF と OSS のエンドポイントを設定して、Hologres、DLF、および OSS が相互にアクセスできるようにするために、次のステートメントを実行します。外部サーバーの作成方法の詳細については、「DLF を使用して OSS からデータを読み書きする」をご参照ください。

    -- Create a foreign server in the China (Shanghai) region.  -- 中国(上海)リージョンに外部サーバーを作成します。
    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 外部テーブルは、Hologres と OSS データレイク間のデータのマッピングのみを保存します。データは OSS データレイクに保存され、Hologres のストレージスペースは占有されません。このようにして、クエリは数秒または数分で応答できます。

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

    IMPORT FOREIGN SCHEMA mydatabase LIMIT TO ----Replace mydatabase with the name of the database that you create on the Database tab of the Metadata page. -- [メタデータ] ページの [データベース] タブで作成したデータベース名に mydatabase を置き換えます。
    (
      nation_orc,
      supplier_orc,
      partsupp_orc
    )
    FROM SERVER dlf_server INTO public options (if_table_exist 'update');
  2. データをクエリします。

    外部テーブルを作成した後、外部テーブルを使用して OSS のデータをクエリできます。ステートメントの例:

    --TPC Benchmark-H (TPC-H) Q11 statement -- TPC ベンチマーク H(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(オプション): Hologres 内部テーブルを使用して OSS データレイクのデータをクエリする

このステップでは、OSS データレイクから Hologres 内部テーブルにデータがインポートされます。データは Hologres に保存されます。これにより、クエリの パフォーマンスが向上し、データ処理機能が向上します。ストレージ料金の詳細については、「課金の概要」をご参照ください。

  1. 外部テーブルと同じスキーマを持つ Hologres に内部テーブルを作成します。ステートメントの例:

    -- Create a table named NATION. -- 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;
    
    -- Create a table named SUPPLIER. -- 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;
    
    -- Create a table named PARTSUPP. -- 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 内部テーブルにデータを同期します。

    --- Import data from the Hologres foreign tables to the Hologres internal tables. -- 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 statement -- 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;

FAQ

Hologres 外部テーブルを作成するときにエラーメッセージ ERROR: babysitter not ready,req:name:"HiveAccess" が報告された場合はどうすればよいですか?

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

  • 解決策: [インスタンス] ページに移動し、目的の Hologres インスタンスを見つけて、[アクション] 列の [データレイク高速化] をクリックします。表示されるメッセージで、[有効にする] をクリックします。

関連情報

このトピックでは、データレイクのデータに対するクエリの高速化方法について説明します。データレイク機能の詳細については、「DLF を使用して OSS からデータを読み書きする」をご参照ください。