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) |
クラウド上にデータレイクとレイクハウスアーキテクチャを迅速に構築するのを支援するフルマネージドサービスです。統合メタデータ管理、統合された権限とセキュリティ管理、便利なデータインジェスト、ワンクリックでのデータ探索機能を提供します。 |
|
|
Object Storage Service (OSS) |
DLF は、クラウドベースのデータレイクの統合ストレージとして OSS を使用します。OSS は、安全でコスト効率が高く、信頼性の高いクラウドストレージサービスであり、あらゆるタイプのデータを大量に保存できます。99.9999999999% (トゥエルブナイン) のデータ耐久性を提供し、データレイクストレージの事実上の標準となっています。 |
|
|
OSS-HDFS サービス (JindoFS とも呼ばれます) は、クラウドネイティブのデータレイクストレージソリューションです。ネイティブの OSS ストレージと比較すると、OSS-HDFS サービスは Hadoop エコシステムのコンピューティングエンジンとシームレスに統合されており、Hive や Spark を使用する典型的なオフライン ETL シナリオで優れたパフォーマンスを発揮します。HDFS ファイルシステムのインターフェイスと完全な互換性があり、包括的な POSIX サポートを提供するため、ビッグデータや AI シナリオにおけるデータレイクコンピューティングに最適です。 |
注意事項
Hologres 共有クラスターはデータを保存せず、外部テーブルを使用してのみ OSS データレイクのクエリを実行できます。
前提条件
本トピックでは、中国 (上海) リージョンを例として、OSS、DLF、Hologres サービスを有効化する方法を説明します。
-
OSS を有効化し、テストデータを準備します。
-
OSS 有効化ページに移動し、画面の指示に従ってサービスを有効化します。
説明OSS を有効化すると、デフォルトの請求方法は従量課金になります。OSS のコストを削減するには、リソースプランを購入することを推奨します。
-
OSS コンソールにログインし、バケットを作成します。詳細については、「コンソールクイックスタート」をご参照ください。
-
tpch_10g_orc_3.zip テストデータをダウンロードし、バケット内の
tpch_10g_orc_3/ディレクトリにアップロードします。説明-
テストデータファイルをアップロードした後、
.DS_Storeなどのファイルが存在する場合は手動で削除してください。 -
ダウンロードを高速化するため、このパッケージには本トピックで必要な
nation_orc、supplier_orc、partsupp_orcテーブルのみが含まれています。
-
-
-
DLF を有効化し、OSS テストデータをインポートします。
-
DLF 有効化ページに移動します。。
-
DLF コンソールにログインします。メタデータ管理 ページで、データベースの作成 をクリックします。詳細については、「データベース、テーブル、関数の管理」をご参照ください。
本トピックでは、
mydatabaseデータベースを作成する例を示します。 -
[Metadata Discovery] ページで、メタデータ検出ジョブを作成して OSS テストデータをインポートします。詳細については、「メタデータ検出」をご参照ください。
ジョブが完了すると、[Data Tables] タブの メタデータ管理 ページにテーブルが表示されます。
データテーブルのリストには、nation_orc、partsupp_orc、supplier_orc の 3 つの ORC テーブルが表示されます。
-
-
Hologres を有効化し、Hologres インスタンスを購入します。詳細については、「Hologres インスタンスの購入」をご参照ください。
説明新規ユーザーの場合は、Alibaba Cloud 無料トライアルページで Hologres の無料トライアルを申請できます。
ステップ1:環境の設定
-
Hologres インスタンスのデータレイク高速化機能を有効にします。
Hologres インスタンスページに移動します。対象インスタンスの 操作 列で、データレイクアクセラレーション をクリックして操作を確定します。この機能を有効にすると、Hologres インスタンスが再起動されます。
-
Hologres インスタンスにログインし、データベースを作成します。詳細については、「HoloWeb に接続してクエリを実行」をご参照ください。
-
(オプション) 拡張機能を作成します。本トピックでは
dlf_fdwを例として使用します。説明この操作は Hologres V2.1 以降では不要です。拡張機能はデフォルトで作成されるためです。Hologres インスタンスページに移動し、インスタンスの詳細 ページでインスタンスのバージョンを確認できます。
CREATE EXTENSION IF NOT EXISTS dlf_fdw;説明このステートメントをスーパーユーザーとして HoloWeb の SQL Editor で実行して、拡張機能を作成してください。この操作はデータベース全体に適用され、データベースごとに 1 回だけ実行する必要があります。Hologres アカウントに権限を付与する方法の詳細については、「ユーザー権限の管理」をご参照ください。
-
次のステートメントを実行して、
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 のストレージ容量を消費しません。クエリは通常、数秒から数分で完了します。
-
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'); -
データをクエリします。
例:
-- 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 に保存され、より高いクエリパフォーマンスとより強力なデータ処理機能を提供します。ストレージ料金の詳細については、「課金の概要」をご参照ください。
-
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 の内部テーブルのデータをクエリします。
-- 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 ベースのデータレイクでのクエリ高速化」をご参照ください。