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 は、クラウドデータレイクに対して、統合メタデータ管理、統合された権限とセキュリティ管理、便利なデータインジェスト、ワンクリックでのデータ探索を提供します。 |
|
|
Alibaba Cloud Object Storage Service (OSS) |
DLF は、クラウドデータレイクの統合ストレージとして OSS を使用します。OSS は、あらゆる種類のファイルの保存に適した、大規模で安全、低コスト、高信頼性のクラウドストレージサービスです。99.9999999999% (トゥエルブナイン) のデータ耐久性を提供し、データレイクストレージのデファクトスタンダードとなっています。 |
|
|
JindoFS とも呼ばれる OSS-HDFS サービスは、クラウドネイティブなデータレイクストレージソリューションです。ネイティブの OSS ストレージと比較して、OSS-HDFS は Hadoop エコシステムのコンピュートエンジンとシームレスに統合され、Hive と Spark を使用する典型的なオフラインの抽出・変換・書き出し (ETL) シナリオでより優れたパフォーマンスを発揮します。Hadoop 分散ファイルシステム (HDFS) インターフェイスと完全に互換性があり、完全な POSIX サポートを提供するため、ビッグデータや AI におけるデータレイクコンピューティングシナリオのニーズをより満たすことができます。 |
注意事項
Hologres 共有クラスターはデータを保存しません。外部テーブルを使用した OSS データレイクのクエリのみをサポートします。
事前準備
このトピックでは、中国 (上海) リージョンを例に、OSS、DLF、Hologres をアクティベートする方法を説明します。
-
OSS をアクティベートし、テストデータを準備します。
-
OSS アクティベーションページに移動し、画面の指示に従ってサービスをアクティベートします。
説明OSS サービスを有効化すると、デフォルトの課金方法は従量課金になります。OSS の利用コストを削減するには、リソースプランの購入を推奨します。
-
OSS コンソールにログインし、バケットを作成します。詳細については、「コンソールでのクイックスタート」をご参照ください。
-
tpch_10g_orc_3.zip テストデータをバケット内のフォルダーにアップロードします。
説明-
テストデータファイルをアップロードした後、
.DS_Storeなどのファイルは手動で削除してください。 -
ダウンロードを高速化するため、このパッケージには、このトピックで必要な nation_orc、supplier_orc、partsupp_orc のデータテーブルのみが含まれています。
-
-
-
DLF をアクティベートし、OSS テストデータをインポートします。
-
DLF アクティベーションページに移動します。
-
Data Lake Formation コンソールにログインします。Metadata Management ページで、Create Database をクリックします。詳細については、「データベース、テーブル、関数」をご参照ください。
このトピックでは、
mydatabaseという名前のデータベースを作成する例を示します。 -
[メタデータクロール] ページで、メタデータクロールジョブを作成して OSS テストデータをインポートします。詳細については、「メタデータクロール」をご参照ください。
ジョブが完了すると、Metadata Management ページの [テーブル] タブでデータを確認できます。

-
-
Hologres をアクティベートし、Hologres インスタンスを購入します。詳細については、「Hologres インスタンスの購入」をご参照ください。
説明新規ユーザーの場合は、Alibaba Cloud 無料トライアルページで Hologres の無料トライアルを申請できます。
ステップ 1:環境の設定
-
ご利用の Hologres インスタンスでデータレイク高速化機能を有効にします。
Hologres インスタンスリストに移動します。対象インスタンスの Actions 列で、Data Lake Acceleration をクリックして操作を確定します。この機能を有効にすると、Hologres インスタンスが再起動します。
-
Hologres インスタンスにログインし、データベースを作成します。詳細については、「HoloWeb に接続してクエリを実行」をご参照ください。
-
(オプション) 拡張機能を作成します。このトピックでは、
dlf_fdwを例として使用します。説明この拡張機能は Hologres V2.1 以降ではデフォルトで作成されるため、この操作を実行する必要はありません。Hologres インスタンスリストに移動し、Instance Details ページでインスタンスのバージョンを確認できます。
CREATE EXTENSION IF NOT EXISTS dlf_fdw;説明上記の文をスーパーユーザーとして HoloWeb の SQL エディターで実行し、拡張機能を作成します。この操作はデータベース全体に適用され、各データベースで一度だけ実行する必要があります。Hologres アカウントに権限を付与する方法の詳細については、「サービスアカウントへの権限付与」をご参照ください。
-
次の文を実行して、
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 のストレージ領域を占有しません。クエリのパフォーマンスは通常、数秒から数分です。
-
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'); -
データをクエリします。
外部テーブルが作成された後、直接クエリを実行して 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 に保存され、より優れたクエリパフォーマンスと高いデータ処理能力を提供します。ストレージ料金の詳細については、「課金の概要」をご参照ください。
-
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; -
Hologres 外部テーブルから Hologres 内部テーブルにデータを同期します。
--- Hologres 外部テーブルから内部テーブルにデータをインポートします。 INSERT INTO nation SELECT * FROM nation_orc; INSERT INTO supplier SELECT * FROM supplier_orc; INSERT INTO partsupp SELECT * FROM partsupp_orc; -
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 データレイクへのアクセスの高速化」をご参照ください。