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 は、クラウド内のデータレイクに対して、メタデータの一元管理、権限とセキュリティの一元管理、便利なデータ取り込みと探索機能を提供します。 | |
OSS | DLF は、クラウドデータレイクの統合ストレージとして OSS を使用します。OSS は、大量のデータとあらゆる種類のファイルを保存できる、安全で費用対効果が高く、信頼性の高いサービスです。OSS は 99.9999999999% のデータ耐久性を提供でき、データレイクストレージの事実上の標準となっています。 | |
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 分野のデータレイクベースのコンピューティングシナリオでデータを管理できます。 |
使用上の注意
Hologres Shared Cluster インスタンスはデータを保存しません。Hologres Shared Cluster インスタンスを使用する場合、外部テーブルを使用して OSS データレイクからデータを読み取ることができますが、OSS データレイクにデータを書き込むことはできません。
準備
この例では、OSS、DLF、および Hologres は中国(上海)リージョンでアクティブ化されています。
OSS をアクティブ化し、テストデータを準備します。
OSS アクティベーションページで、画面の指示に従って OSS をアクティブ化します。
説明OSS がアクティブ化されると、デフォルトで従量課金制の課金方法が使用されます。OSS 料金を削減する場合は、OSS リソースプランを購入することをお勧めします。
OSS コンソールにログインし、OSS バケットを作成します。詳細については、「OSS コンソールを使用した作業の開始」をご参照ください。
テストデータファイル tpch_10g_orc_3.zip をダウンロードし、作成した OSS バケットにアップロードします。
説明テストデータファイルをアップロードした後、
.DS_Storeなどのファイルが存在する場合は、手動で削除します。テストデータには、ダウンロード時間を短縮するために、nation_orc、supplier_orc、および partsupp_orc ファイルのみが含まれています。
DLF をアクティブ化し、OSS から DLF にテストデータをインポートします。
製品ホームページにアクセスして、DLF をアクティブ化します。
DLF コンソールにログインします。左側のナビゲーションペインで、[メタデータ] > [メタデータ] を選択します。表示されるページの [データベース] タブで、[データベースの作成] をクリックします。次に、パラメータを設定し、[OK] をクリックします。詳細については、「メタデータ管理」トピックの「データベーステーブルと関数」をご参照ください。
この例では、
mydatabaseデータベースが作成されます。[メタデータディスカバリ] ページで、メタデータ抽出タスクを作成して、OSS から DLF にテストデータをインポートします。詳細については、「メタデータディスカバリ」をご参照ください。
メタデータが抽出されると、[テーブル] タブの [メタデータ] ページでメタデータを表示できます。

Hologres をアクティブ化し、Hologres インスタンスを購入します。詳細については、「Hologres インスタンスの購入」をご参照ください。
説明新規ユーザーの場合は、Alibaba Cloud 無料トライアルページにアクセスして、Hologres の無料トライアルを申請できます。
ステップ 1. 環境を設定する
Hologres インスタンスのデータレイク高速化を有効にします。
Hologres コンソールの [インスタンス] ページに移動します。目的のインスタンスを見つけて、[アクション] 列の [データレイク高速化] をクリックします。表示されるメッセージで、[有効にする] をクリックします。データレイク高速化が有効になると、Hologres インスタンスが再起動されます。
Hologres インスタンスにログインし、データベースを作成します。詳細については、「HoloWeb に接続してクエリを実行する」をご参照ください。
オプション。拡張機能をインストールします。この例では、拡張機能
dlf_fdwがインストールされています。説明V2.1 以降の Hologres インスタンスでは、拡張機能が自動的にインストールされます。Hologres インスタンスのバージョンを確認するには、[インスタンス] ページに移動し、インスタンスをクリックして [インスタンスの詳細] ページに移動します。
CREATE EXTENSION IF NOT EXISTS dlf_fdw;説明HoloWeb コンソールの SQL エディター タブで、スーパーユーザーとして上記ステートメントを実行して拡張機能をインストールします。拡張機能はデータベースレベルでインストールされます。各データベースでは、拡張機能を 1 回だけインストールする必要があります。Hologres のアカウント認証の詳細については、「サービスアカウントに権限を付与する」をご参照ください。
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 のストレージスペースは占有されません。このようにして、クエリは数秒または数分で応答できます。
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');データをクエリします。
外部テーブルを作成した後、外部テーブルを使用して 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 に保存されます。これにより、クエリの パフォーマンスが向上し、データ処理機能が向上します。ストレージ料金の詳細については、「課金の概要」をご参照ください。
外部テーブルと同じスキーマを持つ 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;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;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 からデータを読み書きする」をご参照ください。