Hologres Query Engine (QE) は、Hologres のクエリ処理レイヤーです。SQL クエリを適切な実行エンジンにルーティングし、分散ワーカー全体で並列実行し、結果をクライアントに返します。
仕組み
Hologres QE は、コンピューティングとストレージが分離された Storage Disaggregation アーキテクチャ上に構築されています。各ワーカーは、フロントエンド (FE) からクエリを受信し、クエリタイプに基づいて実行パスを選択し、Storage Engine (SE) からデータを取得し、シャード全体で結果をマージしてからクライアントに返します。
実行計画は、非同期演算子の有向非循環グラフ (DAG) として表現されます。この構造により、Query Optimizer (QO) は幅広い最適化手法を適用でき、Hologres QE が設計された分散並列実行をサポートします。
主な機能
分散実行
Hologres QE は、複数のワーカーでクエリを並列実行します。DAG ベースの実行計画は、複雑なクエリを独立した演算子に分解し、ワーカー全体に分散し、結果をマージします。
完全非同期実行
Hologres QE のすべての演算子は、エンドツーエンドで非同期です。高同時実行システムでは、同期入出力はストレージ読み取りを待機中にスレッドをブロックします。Hologres QE は、計算とストレージレイテンシーをデカップリングすることでこのボトルネックを排除します。これにより、スレッドがデータを待機してブロックされることがなく、高負荷の同時ワークロード下でもシステムリソースが完全に活用されます。これは、Storage Disaggregation アーキテクチャによって引き起こされる読み取りレイテンシーの影響を最小限に抑えます。
ベクトル化およびカラム指向処理
従来のクエリエンジンはデータを1行ずつ処理し、行ごとの CPU オーバーヘッドを蓄積します。Hologres QE は、各演算子内でデータをバッチ (ベクトル) で処理することで、行ごとのオーバーヘッドを削減し、CPU 使用率を最大化します。QE は SE と深く統合されているため、インデックスを活用して不要なデータ読み取りや計算をスキップし、クエリが使用しないデータをロードしないように、ベクトル化とマテリアライズを可能な限り遅延させることができます。
適応型増分処理
リアルタイム取り込みと分析を組み合わせたワークロードの場合、Hologres QE は適応型増分処理を使用します。定期的に更新されるデータに対するクエリは増分的に処理され、データが到着してもレイテンシーを低く保ちます。
特定のクエリパターンに対する最適化
汎用的な最適化に加えて、Hologres QE には特定のクエリパターンに対するターゲットを絞った最適化が含まれています。たとえば、ポイントクエリは QO を完全にバイパスして実行レイテンシーを最小限に抑えます (詳細については、「クエリ実行プロセス」をご参照ください)。
クエリ実行プロセス
Hologres QE には複数のワーカーが含まれています。次の図は、ワーカーがクライアントによって開始されたクエリを実行する方法を示しています。

クライアントが SQL クエリを送信すると、実行は次のように進行します。
FE は SQL クエリを認証し、解析した後、Hologres QE の異なるモジュールに分散します。
QE は実行パスを選択します。
[ポイントクエリ] — FE はクエリを Fixed QE に直接ルーティングし、QO をバイパスします。この固定計画は最適化オーバーヘッドをスキップし、最小限のレイテンシーで結果を返します。HBase のキーバリュー検索に似たポイントクエリとポイント書き込みは、両方ともこのパスを使用します。
[Online analytical processing (OLAP) クエリ] — FE はクエリを QO にルーティングします。QO はクエリを分析し、演算子コストを推定し、統計を収集し、クエリ範囲を絞り込み、実行計画を生成します。計画に基づいて、QO は各演算子を Hologres Query Engine (HQE)、PostgreSQL Query Engine (PQE)、Seahawks Query Engine (SQE)、または Hive Query Engine (Hive QE) の実行エンジンに割り当てます。
QE は SE を使用してデータをフェッチし、すべてのシャードから結果をマージし、クエリ結果をクライアントに返します。
実行エンジン
Hologres QE は複数の実行エンジンをサポートしており、それぞれが異なるワークロード向けに最適化されています。
Hologres Query Engine (HQE)
HQE は Hologres QE の主要モジュールであり、Alibaba Cloud によって開発されました。スケーラブルな超並列処理 (MPP) アーキテクチャを使用して、すべてのワーカーで演算子を完全に並列で実行します。ベクトル化された演算子は、高速な分析クエリのために CPU 使用率を最大化します。HQE は各リリースで継続的に拡張されており、PQE のすべての機能を統合するという長期目標を掲げています。
PostgreSQL Query Engine (PQE)
PQE は PostgreSQL エコシステムとの互換性を提供します。HQE でまだサポートされていない関数と演算子は PQE によって処理されます。PQE は、PostGIS などの PostgreSQL 拡張、および PL/Java、PL/SQL、または PL/Python で記述されたユーザー定義関数 (UDF) をサポートしています。
Seahawks Query Engine (SQE)
SQE は、データ移行やインポートを必要とせずに、Hologres を MaxCompute に直接接続します。ハッシュテーブルや範囲クラスター化テーブルなどの複雑なテーブルタイプを含む MaxCompute ファイルへの高性能なアクセスを提供します。SQE は、MaxCompute に保存されているペタバイト規模のバッチデータのインタラクティブな分析を可能にします。