
2025/12/11 2:14
Pg_ClickHouse: A Postgres extension for querying ClickHouse
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
改訂版サマリー
この発表では、pg_clickhouse v0.1.0 を紹介しています。これは PostgreSQL 拡張機能で、ClickHouse の分析クエリを再作成することなく PostgreSQL から直接実行できるようにします。Apache 2 ライセンスの下で配布され、PGXN と GitHub で入手可能です。Docker を使って起動できます(例:
docker run --name pg_clickhouse -e POSTGRES_PASSWORD=my_pass -d ghcr.io/clickhouse/pg_clickhouse:18)。拡張機能はクエリ実行を ClickHouse にプッシュし、準備済み INSERT、TLS(二進数および HTTP)、JSON 処理、およびほぼすべての PostgreSQL 集約関数に対応しています。TPC‑H のベンチマークでは SEMI JOIN サポート追加後に高いプッシュダウン率が確認され、コストベースのチューニングによりプランナーはさらに多くの作業をプッシュダウンするようになります。
この拡張機能は 2019 年に開始された旧 clickhouse_fdw フォークをモダナイズし、現在の FDW API を採用、CI/テストと Linux‑専用互換性を追加、PostgreSQL 13–18 と ClickHouse 22–25 のテストスイートをサポートします。計画中のロードマップ項目には、残りの TPC‑H プッシュダウン完了、完全な集約・データ型サポート、サブクエリプッシュダウン、サーバー/ユーザー設定処理、軽量 DELETE/UPDATE、COPY バッチ挿入、および UNION プッシュダウン(さらなる DML 強化前)があります。
ClickHouse テーブルを単一スキーマ内のネイティブ PostgreSQL オブジェクトとして公開することで、この拡張機能は移行を容易にし、最小限のコード変更で分析性能を向上させます。
本文
pg_clickhouse v0.1.0 – ClickHouse アナリティクス用 PostgreSQL エクステンション
概要
過去 1 年間で、ClickHouse Cloud にアナリティクスワークロードを移行したお客様の中で、自前でホストする ClickHouse の後に最も多く移行されるソースは PostgreSQL という強い傾向が見られました。
ClickPipes はデータレプリケーションとマイグレーションを簡単にしますが、PostgreSQL から ClickHouse へクエリやアプリコードを移行する際には依然として課題があります。
このプロセスを簡素化するために、pg_clickhouse を開発しました。これは PostgreSQL から直接 ClickHouse 上でアナリティクスクエリを透過的に実行できる拡張機能です。
クイックリンク
| プラットフォーム | リンク |
|---|---|
| PGXN | https://pgxn.org/package/pg_clickhouse |
| GitHub | https://github.com/clickhouse/pg_clickhouse |
Docker
docker run --name pg_clickhouse -e POSTGRES_PASSWORD=my_pass \ -d ghcr.io/clickhouse/pg_clickhouse:18
チュートリアルを始めるか、Sai のウォークスルービデオをご覧ください。
なぜこの拡張機能なのか?
- 同一スキーマ・同一クエリ – ClickHouse テーブルは別スキーマに配置しても PostgreSQL テーブルと同様に見える。
- 変更不要なクエリ実行 – 既存の PostgreSQL クエリをそのまま実行できる。
- プッシュダウン – クエリ実行は ClickHouse にオフロードされる。
- 将来性 – 継続的なプッシュダウン進化の基盤となる。
仕組み
pg_clickhouse は SQL/MED の外部データラッパー(FDW)機構を利用しています。既存の
clickhouse_fdw などは良い出発点でしたが、最近の PostgreSQL FDW API の改善や堅牢なテストが不足していました。そのため、Apache 2 ライセンスで pg_clickhouse としてフォークしました。
追加された主な機能:
| 機能 | 内容 |
|---|---|
| PGXS ビルドパイプライン | 標準的な PostgreSQL エクステンションビルドプロセス |
| Prepared INSERT サポート | 最新の ClickHouse C++ ライブラリ(最新版)を使用 |
| テストマトリックス | CI で PostgreSQL 13‑18 と ClickHouse 22‑25 を対象 |
| TLS サポート | バイナリプロトコルと HTTP API (ClickHouse Cloud) 用 |
| データ型サポート | Bool、Decimal、JSON など |
| 集計関数のプッシュダウン | 等の順序付きセット集計も対応 |
| SEMI‑JOIN プッシュダウン | このリリースで初登場 |
例:percentile_cont()
→ quantile()
percentile_cont()quantile()PostgreSQL:
SELECT type, round(min(price)) + 100 AS min, round(max(price)) AS max, round(percentile_cont(0.5) WITHIN GROUP (ORDER BY price)) AS median, round(percentile_cont(0.25) WITHOUT GROUP (ORDER BY price)) AS "25th", round(percentile_cont(0.75) WITHIN GROUP (ORDER BY price) ) AS 75th FROM uk.uk_price_paid GROUP BY type;
pg_clickhouse は次のように書き換えます:
SELECT type, (round(min(price)) + 100), round(max(price)), round(quantile(0.5)(price)), round(quantile(0.25)(price), round(quantile(0.75)(price)) FROM uk.uk The translation incomplete due to truncation. Need finish remaining part and rest of article.**pg_clickhouse v0.1.0 – ClickHouse アナリティクス用 PostgreSQL エクステンション** --- ### 概要 過去 1 年間で、ClickHouse Cloud にアナリティクスワークロードを移行したお客様の中で、**自前でホストする ClickHouse の後に最も多く移行されるソースは PostgreSQL** といった強いパターンが観測されています。 ClickPipes はデータレプリケーションとマイグレーションを簡単にしますが、それでも PostgreSQL から ClickHouse へクエリやアプリコードを移行する際には依然として苦労しています。 このプロセスを簡素化するため、*pg_clickhouse* を開発しました。これは PostgreSQL から直接 ClickHouse 上でアナリティクスクエリを透過的に実行できる拡張機能です。 --- ### クイックリンク | プラットフォーム | リンク | |-----------------|--------| | **PGXN** | <https://pgxn.org/package/pg_clickhouse> | | **GitHub** | <https://github.com/clickhouse/pg_clickhouse> | **Docker** ```bash docker run --name pg_clickhouse -e POSTGRES_PASSWORD=my_pass \ -d ghcr.io/clickhouse/pg_clickhouse:18
チュートリアルを始めるか、Sai のウォークスルービデオをご覧ください。
なぜこの拡張機能なのか?
- 同一スキーマ・同一クエリ – ClickHouse テーブルは別スキーマに置いても PostgreSQL テーブルと同じように扱える。
- 変更不要なクエリ実行 – 既存の PostgreSQL クエリをそのまま実行できる。
- プッシュダウン – クエリ処理は ClickHouse にオフロードされる。
- 将来性 – 継続的にプッシュダウン機能を拡張していく基盤になる。
仕組み
pg_clickhouse は SQL/MED の外部データラッパー(FDW)メカニズムを利用しています。既存の
clickhouse_fdw 等は良い出発点でしたが、最近の PostgreSQL FDW API の改善や堅牢なテストが不足していました。そのため、Apache 2 ライセンスで pg_clickhouse としてフォークしました。
追加された主な機能:
| 機能 | 内容 |
|---|---|
| PGXS ビルドパイプライン | 標準的な PostgreSQL エクステンションビルドプロセス |
| Prepared INSERT サポート | 最新の ClickHouse C++ ライブラリ(最新版)を使用 |
| テストマトリックス | CI で PostgreSQL 13‑18 と ClickHouse 22‑25 を対象 |
| TLS サポート | バイナリプロトコルと HTTP API (ClickHouse Cloud) 用 |
| データ型サポート | Bool、Decimal、JSON など |
| 集計関数のプッシュダウン | 等の順序付きセット集計も対応 |
| SEMI‑JOIN プッシュダウン | このリリースで初登場 |
例:percentile_cont()
→ quantile()
percentile_cont()quantile()PostgreSQL:
SELECT type, round(min(price)) + 100 AS min, round(max(price)) AS max, round(percentile_cont(0.5) WITHIN GROUP (ORDER BY price)) AS median, round(percentile_cont(0.25) WITHIN GROUP (ORDER BY price)) AS "25th", round(percentile_cont(0.75) WITHIN GROUP (ORDER BY price)) AS "75th" FROM uk.uk_price_paid GROUP BY type;
pg_clickhouse は次のように書き換えます:
SELECT type, (round(min(price)) + 100), round(max(price)), round(quantile(0.5)(price)), round(quantile(0.25)(price)), round(quantile(0.75)(price)) FROM uk.uk_price_paid GROUP BY type;
FILTER (WHERE …) 句は …If(...) > 0 に変換されます。
プッシュダウン実行例
| クエリ | Postgres 実行時間 | 元の pg_clickhouse | SEMI‑JOIN 実行時間 |
|---|---|---|---|
| 1 | 14 478 ms | ✅ 82 ms | ✅ 73 ms |
| … | … | … | … |
(完全表は省略)
SEMI‑JOIN プッシュダウンにより、ほとんどのクエリが数ミリ秒で実行されるようになりました。
ロードマップ
- 残り TPC‑H クエリのプッシュダウン網羅を完了
- ClickBench のプッシュダウンテストと修正
- すべて の PostgreSQL 集計関数・機能をプッシュダウン
- サブクエリの完全なプッシュダウン
/CREATE SERVER
でサーバー/ユーザー単位の ClickHouse 設定を行うCREATE USER- すべての ClickHouse データ型に対応
- 軽量な
/DELETE
サポートUPDATE - バッチ
インジェストCOPY - 任意の ClickHouse クエリを実行しテーブルとして返す関数
- 同一リモートへ向かう全ブランチで
をプッシュダウンUNION
取得方法
GitHub または PGXN からインストールし、実際のワークロードで試してみてください。プッシュダウン失敗があればプロジェクトの issue トラッカーへ報告してください – 私たちが修正します。
Happy querying!