pg_clickhouse v0.10:サブクエリプッシュダウンと TPC-H クエリの 1000 倍高速化

2026/08/12 6:54

pg_clickhouse v0.10:サブクエリプッシュダウンと TPC-H クエリの 1000 倍高速化

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

修正済みサマリの提案

「pg_clickhouse v0.10.0 リリースは、クエリ・プッシュダウンを目的とした根本的なアーキテクチャの転換をもたらしました。これにより、TPC-H クエリのカバー範囲は 22 のうち 16 に拡大し(前版から 12 から増加)、Query Q17 のレイテンシは 3 秒以上からわずか 24 ミリ秒へと劇的に削減されました。この実現を可能にするため、ドライバは C++ から効率的なプレーン C クライアントライブラリ(

clickhouse-c
)に変更され、ビルド時間/サイズの削減率 75% を達成するとともに、メモリ効率の高いストリーミング処理が可能になりました。今回の更新では、PostgreSQL の三値論理と ClickHouse の二値システムを IN オペレーターファミリー全体で統合するため、
transform_null_in
をハードコードしてゼロに固定し、ビルトイン関数のオプトイン型アクティベーションを導入することで意味論的なエラーを防ぎました。さらに、このリリースでは非効率的な SubPlan ノードを排除し、相関 EXISTS サブクエリを単一のステートメントとしてプッシュダウンするとともに、外国キーのスキャンごとに専用接続を設定することで重大な並行処理クラッシュを修正しました。加えて、v0.10 では多次元配列のサポート、新しい圧縮オプション、および高度な統計的アグリゲートが追加されました。ただし、ユーザーは非推奨となったバッチ処理オプションの廃止に適応する必要があり、また 6 つのクエリ(特に anti/semi-join 内部ネストされた join)についてはプッシュダウンされていないことを留意してください。」

本文

pg_clickhouse v0.10.0: TPC-H 完全プッシュダウンの進捗とアーキテクチャの刷新

pg_clickhouse の継続的な投資の一環として、分析ワークロードにおけるプッシュダウン(Pushdown)カバレッジの向上が最優先事項です。当面の目標は TPC-H ベンチマークスイートの全問にわたる完全プッシュダウン です。2023 年 12 月の導入発表以来、大幅な進展を遂げました。

TPC-H スコアボードの進捗状況

v0.10.0 リリースに伴い、完全プッシュダウンされた TPC-H クエリは 22 問中 16 問に増加しました(前回より +4 問)。残りの未対応クエリは 6 問となりました。

劇的なパフォーマンス改善

以前非効率だった 3 つのクエリが完全プッシュダウンできるようになりました。これにより、ローカルでのサブクエリ評価を避け、ClickHouse が直接処理可能になりました。

クエリPostgreSQLpg_clickhouse 0.3 (推定)pg_clickhouse 0.10 (現在)プッシュダウン状態
Q288 ms3,446 ms24 ms✔ (完全)
Q172,107 ms32,709 ms37 ms✔ (完全)
Q22270 ms1,415 ms45 ms✼ (一部)*
  • (✔) クエリ全体が単一の外部スキャンとして実行。
  • (✼) プッシュダウンは行われていますが、複数のリモートクエリが必要です(通常、外部スキャンと InitPlan スキャンの組み合わせ)。

Q17 の事例:

  • 内容: 6M 行数(スケールファクター 1)に対し、相関付きサブクエリによる平均値計算(
    l_quantity
    part
    あたりに平均化)。
  • 改善前: スケーリング時に 32.7 秒 かかる。
  • 改善後: 完全プッシュダウンにより 37 ミリ秒 に短縮。
  • 効果:1,000 分の 1 の劇的改善。PostgreSQL ネイティブ(2.1 秒)よりも明確に高速化されています。

残りの課題:6 つの未対応クエリ

現在プッシュダウンされていないのは以下の 6 クエリです:Q13, Q15, Q16, Q18, Q20, Q21

  • Q16 / Q18 (前進あり): SQL 形状(
    IN
    ,
    NOT IN
    を反転結合として)のプッシュダウンは可能ですが、PostgreSQL がサブクエリを平坦化し、入力が**結合(JOIN)**となっている点が障害です。現在のデパサーは結合ツリーを両側で遡る処理ができません。
  • Q15 / Q20 (同様の問題): 上記のバリエーションであり、これが次期ロードマップの主要な課題となります。

アーキテクチャと実装の詳細革新

1. SubPlan(サブプラン)のプッシュダウン

頭版機能により、「相関付き EXISTS サブクエリ」を単一の

LEFT SEMI JOIN
として処理する学習が可能になりました。これにより、完全プッシュダウン数は 3 から 22 に劇的に増加しました。

  • 仕組み:
    EXPLAIN
    では
    SubPlan
    ノードが残りますが(帳簿処理)、実際の
    Remote SQL
    はサブクエリを含む単一のステートメントとして ClickHouse に送信されます。
  • サポート範囲:
    NOT IN
    LEFT ANTI JOIN
    として同様に扱えます。

実装例:ClickHouse 内でのサブクエリ処理

EXPLAIN (VERBOSE, COSTS OFF)
SELECT s.sale_id, s.amount FROM sales s
WHERE s.amount > (SELECT 1.5 * avg(s2.amount) FROM sales s2
                  WHERE s2.item_id = s.item_id)
ORDER BY s.sale_id;

実行結果の要点:

  • SubPlan expr_1
    ノードは存在しますが、比較的全部内容(サブクエリ含む)は 単一の Remote SQL ステートメント として送信されています。
  • これにより Q2 のような構造も単一外部スキャン+リモートクエリの構成にできます。

⚠️ サーバーバージョンの制限: クリックハウス バージョン 25.8 未満ではこの形状をサポートしていないため、動作しません(フォールバック実行)。

2. NULL 値の安全性確保(三値論理 vs 二値論理)

ClickHouse の

IN
は二値論理、PostgreSQL は三値論理を採用しているため、単純なプッシュダウンは危険です。

  • リスク: PostgreSQL では
    x NOT IN (1, NULL)
    TRUE
    にはならず、NULL が関与すると予期せぬ結果(静的逆転)を生じる可能性があります。

v0.10 の修正により、各発現の結果の消費方法を追跡し、整合性を保つための**防御的対策(Hedging)**が実装されました。

状況に応じたプッシュダウン戦略

状況プッシュダウン結果動作説明
NULL 値を含む場合
(例:
NOT IN (1, NULL)
)
CASE WHEN
文が追加される
ClickHouse 側で NULL をチェックし、Postgres の挙動(FALSE/NULL)を模倣します。
NULL 値を含まない場合
(例:
NOT IN (1, 500)
)
ネイティブ
IN
として送信
追加のガードなしで最適に実行されます。
-- NULL がある場合:Guard が追加される
EXPLAIN (VERBOSE, COSTS OFF)
SELECT id FROM tnull WHERE xn NOT IN (1, NULL) ORDER BY id;
-- Remote SQL: CASE WHEN ... THEN NULL ... END

-- NULL のない場合:単純な IN として送信
EXPLAIN (VERBOSE, COSTS OFF)
SELECT id FROM tnull WHERE xn NOT IN (1, 500) ORDER BY id;
-- Remote SQL: xn NOT IN (1, 500)
  • 一般化:
    IN
    ,
    NOT IN
    ,
    = ANY
    ,
    <\> ANY
    など全てのスカラ/アレイ形式に適用(#317)。
  • 設定の注意: クリックハウスの二値論理仮定に基づいています。サーバーレベルの設定
    transform_null_in
    がこの挙動を変更するため、pg_clickhouse 側では
    pg_clickhouse.session_settings.transform_null_in = 0
    をデフォルトに設定し、ガードが無効化されるのを防いでいます。

3. バイナリドライバーの刷新 (
clickhouse-c
への移行)

古くからの

clickhouse-cpp
ベースから、新しい C クライアント
clickhouse-c
(git サブモジュールとしてベンダー化)に全面置き換えました(#254)。

  • メモリ効率: C++ の例外処理と Postgres エラー処理の混在によるクラッシュを防止。ブロック単位の結果ストリーミングにより、メモリの使用量が劇的に改善。
  • ビルドサイズ: 依存ライブラリのビルド時間とサイズが 75% 以上削減
  • 通信プロトコル: HTTP ドライバーも ClickHouse ネイティブ形式をサポートし、古い TSV ベースの経路廃止(#328)。
    • fetch_size
      設定は廃止(ネイティブデコーダーは常に curl チャンク単位でストリーミングするため)。
  • セキュリティ: TLS コントロールと明示的な圧縮サポート(none/lz4/zstd)の追加。

4. プッシュダウン可能な機能リストの拡大

関数、演算子、集合演算子の領域が大幅に拡大しました(詳細は CHANGELOG 参照)。

  • 統計的・ソート順集合演算子:
    corr
    ,
    covar_pop/samp
    ,
    percentile_cont/disc
    など。
  • パーティション単位演算子: 外部パーティション計算機能の強化。
  • 文字列・日時処理:
    ltrim/rtrim/btrim
    , エンコーディング、間隔算術の拡張など。
  • その他改善:
    • ビルトイン関数のプッシュダウンを**オプトイン (#245)**にすることで、セマンティクスの整合性を担保(三角関数等の例外対応)。
    • clickhouse-c
      統合による信頼性向上(並行スキャンの衝突防止、Use-After-Free バグ修正など)。

追加された主要な機能

  • JSON: ネイティブ JSON タイプのマッピング、パスアクセスオペレーターの追加。
  • アレイ:
    array_cat
    ,
    append
    , スライス構文 (
    arr[L:U]
    ) 等の多数の関数対応。
  • 集合演算子: ウィンドウ関数 (
    ROW_NUMBER
    ,
    NTILE
    など) の完全セット対応、ブール値・文字列集約関数の追加。
  • ユーティリティ:
    clickhouse_query()
    clickhouse_perform()
    の新機能化(#309, #329)、バージョンレポート機能の追加。

今後のロードマップと課題

現在、TPC-H クエリへの完全プッシュダウンには Q15, Q16, Q18, Q20 をブロックする「結合ツリー両側での制限」が残っています。これらが次の段階的なサブクエリプッシュダウンの鍵となります。

また、以下の機能も残りの課題としてリストアップされています:

  • 未対応の PostgreSQL 関数の追加
  • 軽量な
    DELETE
    /
    UPDATE
    のプッシュダウン
  • UNION
    のプッシュダウン

これらのクリアが完了するまで、pg_clickhouse の分析パフォーマンス向上の旅はまだ続きます。

同じ日のほかのニュース

一覧に戻る →

2026/08/12 4:35

Nvidia Nemotron 3.5 Lightning および NeMo Switchyard

## Japanese Translation: NVIDIA は、マルチエージェントシステム内の長期間にわたるエージェント型 AI ワークロードおよび専門的なタスク向けに設計された、300 億パラメータを持つ混合物専門家(MoE)オープンモデル「Nemotron 3.5 Lightning」を発表しました。本モデルは最先端レベルの精度を提供するとともに、出力速度が最大で 4 倍高速化し、エージェント型タスクの完了速度も約 30% 向上しています。これにより、大量の実装が可能になりつつ運用コストを削減できます。本モデルは、NVIDIA NeMo を用いて組織固有のデータを用いた後学習が可能であり、Nemotron Coalitions の貢献に基づいています。また、データのプライバシーと制御を維持するため、ローカル AI システム(NVIDIA RTX PC、DGX Spark、DGX Station、Jetson)、エッジデバイス、ワークステーション、データセンター、クラウド環境への展開をサポートしています。 効率を最大化するため、NVIDIA は開発者がアプリケーションを書き直す必要なく、品質、遅延、予算に基づいて自動的にリクエストを開封モデル、プロプライエタリモデル、または NVIDIA の混合モデルの最も適したものへ導くオープンソースのインテリジェントルーティングライブラリ「NeMo Switchyard」を発表しました。パートナー企業は既に Switchyard を統合し、精度を維持しつつコスト削減を実現しています。具体的な事例としては、Boomi(ドメインルーティング精度 100%)、Ramp(コスト削減 58%)、Classmethod(コスト削減 27%)、Cognition(Devin Desktop のコスト削減 28%)があり、Kong、LangChain、LiteLLM、Nous Research、Siemens による統合も進んでいます。 業界での採用は加速しており、組織はセキュリティ対策(CrowdStrike)、法務サービス、コードレビュー、ソフトウェア開発(Harvey との Trajectory、CodeRabbit との Baseten、Lila Sciences、Fastino Labs など)といったドメイン特化のエージェント型タスクに Nemotron 3.5 Lightning をカスタマイズしています。Nemotron 3.5 Lightning は Hugging Face、ModelScope、OpenRouter、build.nvidia.com(NVIDIA NIM マイクロサービスとして)、ならびに幅広い NVIDIA クラウドパートナーのエコシステムを通じて提供可能です。一方、NeMo Switchyard は GitHub で利用可能で、近々パートナープラットフォームにも展開されます。

2026/08/12 4:49

圧縮とは予測である

## Japanese Translation: ## 概要: Annie Sexton は ngrok で開発者教育担当として在籍し、Heroku、Render、Fly.io など PaaS 企業にて 10 年以上にわたって経験を持つ人物です。彼女は、「nerd-sniping」と呼ばれる遊び心のある用語で表される開発者への情熱——すなわち共有する技術的熱情を即座に惹きつけ、彼らを魅了する能力——によって際立っています。彼女の主な価値は、複雑なクラウドインフラストラクチャとそれを構築する人間クリエイターの間を取り持つことにあります。この深い歴史的文脈とエンジニアリングの craft に対する真摯な共感を活用することで、Annie は抽象的な技術概念をアクセスしやすく魅力的な学習体験へと転換させます。これにより開発者が支えられていると感じることが保証され、混同ではなくつながりを通じて革新が育まられるエコシステムが醸成されます。

2026/08/12 1:56

Mojo 1.0

## Japanese Translation: Mojo言語のバージョン1.0がリリースされ、2023年の初リリース以来確立された安定した、プロダクション対応の基盤へと、急激な実験段階からの移行を象徴しています。1.xシリーズではC++などの成熟した言語の標準に従い、破損を引き起こすシフトを避けるために追加的な変更を優先します。約20万人のコードラインと、ほぼ200人の貢献者から寄せられた1,100以上のプルリクエストを基盤としており、一貫性のある`var`を用いた変数宣言、統合されたクロージャ、単一のPointerType、そして正確な語彙再命名といった主要な簡素化がリリースに含まれています。新しい機能には、Python風のラムダ構文、参照無効化に対する改良されたメモリ安全性診断、より優れた`where`節、VS Code向けのより安定したLSPサーバーが含まれます。開発者は今や、信頼性の高い「1.0対応」のAIスキルを使用でき、`uv pip install --upgrade mojo`または`uv pip install max[all]`などのコマンドでインストールできます。MAXの強化(GLM-5.2およびNemotron-Hへのサポートなど)は`max["serve"]`を通じて利用可能で、skills.shを通じてオープンソースのエージェントスキル7,200以上がダウンロードされ、モデル全体のライフサイクル導入を加速しています。不安定なモジュール化パッケージはバージョン26.6で廃止予定となっており、長期的耐久性に向けた完全なアーキテクチャシフトを示しています。今後の投資には非同期プログラミングモデル、パターンマッチング、ユニオンが含まれ、また2026年までにMojoコンパイラとツールチェーンの段階的なオープンソース化も進められます。Mojo、MAX、オープンソースに関する詳細および計画については、8月18日にサンフランシスコで開催されるModConにて共有され、完全な変更ログの詳細はmojolang.orgおよびGitHubリポジトリで入手可能です。

pg_clickhouse v0.10:サブクエリプッシュダウンと TPC-H クエリの 1000 倍高速化 | そっか~ニュース