Hologres V4.2.0 では、クエリの最適化、データインジェスト、AI 機能、ストレージが強化され、複数のデフォルト動作も変更されています。
クエリの最適化とパフォーマンス
バージョン 4.2 では、QE V2 の適用範囲をより多くのシナリオに拡大し、共通テーブル式 (CTE) 向けの新しいプラン書き換えルールを追加するとともに、フラグメントインスタンスとスキャンフィルターの再利用を最適化することで、クエリの最適化を強化しています。これらの改善により、クエリのスループットとフィルタリング効率が大幅に向上します。
-
Query Engine V2 (QE V2) のサポート強化:バージョン 3.1 で導入された QE V2 実行エンジンが、ネステッドループ結合、2 段階ブロードキャスト、ルックアップ結合、SQE (外部テーブルからのダイレクトリード)、および適応型 Bulkload Degree of Parallelism (DOP) を含む、より多くのシナリオをサポートするようになりました。
-
クロス結合のランタイムフィルター対応:スカラーサブクエリの集計結果を大規模なプローブ側テーブルにプッシュダウンし、早期フィルタリングできるようになりました。ランタイムフィルターはスキャンフェーズで一致しない行および行グループを直接除外し、不要な I/O を削減します。
-
ファイル内並列スキャン: 1 つの ORC ファイルを
split_size_mbに基づいて複数のサブスプリットに分割し、複数の NiagaraScan タスクで並行して読み取ることができるようになりました。これにより、大規模なファイルに対するシングルスレッドのスカラー スキャンのボトルネックが解消されます。この機能は GUC パラメーターhg_experimental_enable_parallel_file_scanによって制御され、デフォルトでは無効になっています。 -
Vector TopK スキャンの書き換え:このプラン書き換えにより、スカラークエリのパフォーマンスに大きな影響を与えることなく、ベクタークエリが大規模ファイルのメリットを活用できるようになります。
-
スキャンフィルターの再利用: スキャン演算子がフィルターを再利用することで、メモリ割り当てと計算オーバーヘッドを削減するようになりました。フィルター率が 5%~20% の場合はパフォーマンスが 100% 以上、50% の場合は 200% 以上向上します。GUC パラメーター
hg_experimental_qe_v2_enable_reuse_filterで制御され、デフォルトで有効になっています。 -
フラグメントインスタンスの再利用: フラグメントインスタンスは、スプリットを消費した後、破棄されるのではなく状態をリセットして次のスプリットを消費します。複数ファイルのシナリオでは、これによりメモリコストがゼロに削減され、CPU コストが新しいインスタンスを作成する場合の 41.8% に低下します。GUC パラメーター
hg_experimental_qe_v2_enable_reuse_fragment_instanceによって制御され、デフォルトで有効になっています。 -
冗長なプロジェクトプッシュダウン: クエリプランの早い段階で中間演算子から不要な列が削除されることで、データ幅と全体的な計算オーバーヘッドが削減されます。この機能は GUC パラメーター
hg_experimental_enable_push_down_projectによって制御され、デフォルトで有効です。 -
繰り返し出現するパターンの自動 CTE 抽出: SQL パターンがしきい値を超えて繰り返されると、システムはそれを自動的に CTE として抽出し、冗長なスキャンを削減します。この動作は GUC パラメーター
hg_enable_extract_common_plan_to_cteによって制御され、デフォルトで有効です。 -
CTE プロデューサーへの集計プッシュダウン: CTE コンシューマー上の集計の圧縮率がしきい値を超えた場合に、集計を CTE プロデューサーにプッシュダウンすることで、より早期にデータを圧縮して中間データ量を削減します。この機能は GUC パラメーター
hg_experimental_enable_push_agg_into_cte_producerによって制御され、デフォルトで有効です。 -
CTE にプッシュダウンされた述語の単純化: CTE コンシューマーより上流のフィルターが同じ列を使用し、かつ CTE の参照回数がしきい値を下回る場合、プッシュダウンされた述語は単純化されます。 GUC パラメーター
hg_factorize_pushed_cte_predicates_thresholdによって制御され、デフォルト値は 4 です。 -
ランタイムフィルター向け同値列導出:等価条件から同値列を推論できるようになりました。これにより、追加条件からランタイムフィルターを生成でき、フィルター効果が向上します。
-
シャッフルのプッシュダウンとマージ: 複数レイヤーのハッシュシャッフルが同じプレフィックスを共有する場合、最下層でより少ないハッシュキーを使用してシャッフルが 1 回だけ実行され、冗長な中間シャッフルは削除されます。GUC パラメーター
hg_experimental_enable_push_down_merge_shuffleによって制御され、デフォルトで有効になっています。 -
結合順序の scale_factor を調整する新しい戦略: 結合演算子の数がしきい値以上になると、より最適な結合順序を生成するために
scale_factorが調整されます。この機能は GUC パラメーターhg_experimental_adjust_scale_factor_for_join_orderによって制御され、デフォルトで有効です。 -
Hologres PG 関数の強化:一般的な JSON および JSONB 関数を含む 300 以上の PQE 関数を新しい実行フレームワークへ移行し、HQE へのプッシュダウンが可能になりました。これにより、クエリのパフォーマンスと安定性が大幅に向上します。
データインジェストとインポート
-
Internal Stage 向け書き込みの最適化:データベースを削除して再作成する際に、ステージディレクトリが自動的にクリーンアップされるようになり、ストレージの冗長化リスクを排除します。また、Pangu の I/O スロットリングも強化され、ワーカーごとの IOPS とスループット上限が厳格に適用されます。
-
Paimon ファイルシステムカタログのサポート:Paimon ファイルシステムカタログを介して Paimon テーブルへアクセスできるようになりました。これにより、データレイクテーブルの管理が簡素化され、オンプレミスデータセンターとクラウド間のデータ同期などのハイブリッドクラウドシナリオをサポートします。
-
外部ファイルのスキーマ推論:Hologres が外部 CSV および ORC ファイルのスキーマを自動的に推論できるようになり、外部テーブルの設定作業が軽減されます。
-
Paimon blob 型の読み書きのサポート:DLF を使用することで、Hologres は、PostgreSQL エコシステムで
bytea型にマッピングされる Paimon blob データ型の読み書きをサポートします。これにより、AI 機能は Paimon blob として保存されたマルチモーダルデータを処理できるようになります。 -
データレイクの HiveQE と FSE 向けクエリエンジンパスの統合:データレイクシナリオにおける HiveQE と FSE のクエリエンジンパスを統合し、クエリ効率が 30% 以上向上しました。
データ処理とマテリアライズ
-
動的テーブルの増分モードで TopN データ処理をサポート:増分の動的テーブルの SQL 定義で、ROW_NUMBER() OVER (...) ウィンドウ関数を使用して TopN フィルタリングを実行できます。リフレッシュモードは増分モードとして自動的に推論されます。
-
増分の動的テーブル変更取り込みにおけるメッセージマージ:増分の動的テーブルが変更を取り込む際に、正のメッセージと負のメッセージのマージをサポートするようになりました。これにより、不要なリフレッシュのオーバーヘッドを削減します。
-
定期タスクの Cron ジョブ:
hg_register_cron_job、hg_alter_cron_job、hg_drop_cron_jobなどの関数を使用して、カスタムの定期タスク (Cron ジョブ) を定義できるようになりました。スケジュールまたは間隔、ウェアハウスリソース、および自動再試行ポリシーを指定できます。
AI とマルチモーダル検索
-
Model Studio 向け AI 関数のサポート:AI 関数が Model Studio と統合され、LLM、LLM-VL、embedding、qwen-vl-ocr、qwen-mt シリーズなどのモデルをサポートします。これにより、LLM 推論、テキスト埋め込み、視覚理解、OCR、翻訳などの一般的なシナリオをカバーします。
-
新しい AI 関数:AI_TRANSCRIBE:音声からテキストへの AI 関数
AI_TRANSCRIBE(model, audio_file[, options])を追加し、非構造化の音声データを構造化テキストへ変換します。 -
ai_embed 関数のバイナリ入力サポート:
ai_embed関数がBYTEAコンテンツと Paimon BLOB データに対応し、マルチモーダル検索や画像類似性検索のためにバイナリデータ上で直接埋め込みができるようになりました。 -
全文検索が、あいまいクエリと検索時のトークナイザーパラメーターに対応しました: 全文検索は、あいまい一致に対応し、検索時にトークナイザーを設定するための
search_analyzer_paramsパラメーターをサポートするようになりました。 -
全文インデックスのフォーマットとパフォーマンスの最適化:インデックスフォーマットが単一セグメントではなく複数セグメントを使用するようになり、大規模ファイルに対する高性能な並行インデックスアクセスをサポートします。この変更により、全文インデックス構築時の初期メモリ使用量が削減されます。検索語のヒット率が低いシナリオで検索パフォーマンスが向上し、特定のケースでは 3 倍以上高速化されます。また、pinyin トークナイザーおよびフィルターのトークン化パフォーマンスも改善され、スループットが 25%~150% 向上しました。
データ型と互換性
-
Decimal 256 のサポート:
DECIMALデータ型の精度範囲は 38 桁から 76 桁に拡張され、DECIMAL(76, 38)をサポートするようになりました。これにより、金融および会計アプリケーションの高精度な計算要件に対応します。基本的な算術関数、集計関数、共通の式をサポートし、Dynamic Table の増分リフレッシュで使用できます。分散キー、クラスターキー、またはパーティションキーとして使用することはできません。
ストレージとエンジン
-
新しい Liquid Table では、読み取りまたは書き込みを中断することなくシャード数を変更可能: Liquid Table を作成し、
ALTER TABLEを使用してそのシャード数を動的に変更できます。この変更中、書き込みリクエストではレイテンシーが増加する可能性がありますが、リクエストは失敗しません。読み取りレイテンシーは影響を受けません。V4.1 にダウングレードする前に、すべての Liquid Table を削除する必要があります。 -
テーブルレベルスナップショットの遅延ロードのサポート:件数上限を超えたスナップショットはメモリから削除され、必要に応じてメタタブレットからロードされます。また、ストリーミングが有効なテーブルに対してもスナップショットを作成できます。
-
Hologres テーブルのディスクファイル数の削減:Hologres は各テーブルに対して空のファイルを作成しなくなり、これにより FE の起動速度が向上します。
-
分散エフェメラルストレージ:ステージ実行シンクが分散エフェメラルストレージへの書き込みをサポートし、中間結果の保存と管理が改善されます。
-
サーバーレスコンピューティングにおける論理パーティションテーブルのパーティションレベルロック:サーバーレスコンピューティングのシナリオで、複数パーティションに対する同時 DML 操作が、テーブルレベルロックではなくパーティションレベルロックを使用するようになりました。これにより、パーティション間のロック競合が低減されます。
-
論理パーティションテーブルの一般提供開始:論理パーティションテーブルはベータフェーズを完了し、本番利用が可能になりました。
O&M とリソース管理
-
HBO 適用判定上限の緩和:大規模クエリを識別するためのしきい値を 20 秒から 1 秒に引き下げ、これらのクエリに対してシステムが常に統計情報を書き込むようになりました。これにより、履歴ベースの最適化 (HBO) がより多くのクエリをカバーし、より精度の高い最適化を提供できます。
-
ステージ実行向けシステムテーブルの強化:サーバーレスで割り当てられたコア数やステージ数などの新しいフィールドを追加し、既存のリフレッシュアクティビティ機能と整合させました。これにより、実行進捗の把握と予測が容易になります。
デフォルト動作の変更
-
テーブル統計における
row_countフィールドのロジック変更-
変更点:Hologres は、statistics v2 を使用して
row_countを算出するようになりました。ファイルメタデータに基づくこの新しい方式により、Time-to-Live (TTL) 設定の期限が切れた場合や頻繁な更新が行われるシナリオにおいて、より安定したカウントが提供されます。
-
-
共通テーブルパス経由で MaxCompute からダイレクトリードする場合、auto split がデフォルトで有効になります
-
変更点: バージョン 4.2 以降、共通テーブルパスでは自動分割機能がデフォルトで有効になります。これは GUC パラメーター
hg_experimental_enable_maxcompute_sdk_auto_split_sizeによって制御されます。問題が発生した場合は、このパラメーターを使用して本機能を無効化できます。
-
-
ごみ箱の操作で実行中のクエリがキャンセルされるようになります
-
変更内容:バージョン 4.2 では、ごみ箱内のオブジェクトを削除すると、そのオブジェクトに対して進行中の DML または DQL 操作がキャンセルされます。
-
影響:テーブルをごみ箱に移動すると、そのテーブルに対してアクティブな DML または DQL クエリはキャンセルされ、失敗します。
-
-
システムテーブル権限の変更
-
変更内容:スーパーユーザーは、pg_catalog スキーマ配下のいずれのテーブルに対しても DML 権限を持たなくなりました。
-
影響:
pg_catalogテーブルに対する DML 操作に依存するスクリプトやツールは失敗します。
-
-
最小 TTL 制約の動作変更
-
変更点: 新しい GUC パラメータ
hg_time_to_live_in_days_min_valueは、time_to_live_in_seconds の最小値を制御します。デフォルト値は 36,500 日です。これは、新しいテーブルを作成するときに、TTL を 36,500 日 (100 年) 未満に設定できないことを意味します。
-
-
数値関数における精度推論の変更
-
変更内容:PQE の数値関連関数に精度推論機能が追加されました。精度は切り捨てではなく丸めによって管理されるようになりました。
-
-
Fast Rows のデフォルト有効化と外部テーブル向けパーティション数の調整
-
変更内容:統計情報がない外部テーブルを含むクエリでは、クエリ実行前に Fast Rows を取得するための追加ステップがデフォルトで実行されるようになりました。
-
-
全文検索のデフォルトトークナイザーの変更
-
変更内容: 全文検索用の新しいインデックスを作成する際、デフォルトのトークナイザーは、従来の
jiebaではなくikになりました。この変更により、パフォーマンスと再現率が向上します。
-