
2026/01/27 9:24
**Quack‑Cluster:** 「クワック・クラスタ―:DuckDB と Ray を利用したサーバーレス型分散 SQL クエリエンジン」
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Quack‑Cluster – オブジェクトストレージ上のサーバーレス分散SQL
Quack‑Cluster は、Python、Ray、および DuckDB を使用して AWS S3 や Google Cloud Storage などのクラウドオブジェクトストレージ上で直接実行される高性能なサーバーレス分散 SQL クエリエンジンです。
Ray クラスター内の各ワーカーは、埋め込み DuckDB インスタンスをホストし、データのパーティションを並列に処理します。FastAPI と SQLGlot で構築された Coordinator API は、受信した SQL を解析し、ワイルドカード(例:
s3://bucket/*.parquet)を介して対象ファイルを検出し、実行計画をワーカーへ分散させ、結果は Apache Arrow を通じて効率的にメモリ内転送されます。
このエンジンは DuckDB の方言の豊富なサブセットをサポートしています:SELECT、FROM、WHERE、GROUP BY、ORDER BY、LIMIT;集計関数 COUNT()、SUM()、AVG()、MIN()、MAX();結合(INNER、LEFT、FULL OUTER);副問い合わせ、CTE、ウィンドウ関数、および高度な SELECT 構文。Parquet、CSV などのファイルは、オブジェクトストレージまたはローカルファイルシステムから ETL を一切行わずにネイティブに読み取ります。
クイックスタート
git clone https://github.com/your-username/quack-cluster.git cd quack-cluster make data # サンプル Parquet データを生成 make up scale=3 # Ray ヘッドノード + 3 ワーカーを起動
make down でクラスターを停止します。他の便利なコマンドには make logs、make build、make test、および make clean が含まれます。
製品ごとの売上合計を集計するサンプルクエリは次のようになります:
SELECT product, SUM(sales) AS total_sales FROM "data_part_*.parquet" GROUP BY product ORDER BY product;
API は提供された Postman コレクション(
QuackCluster_API_Tests.json)と環境ファイルでテストできます。
ロードマップ
今後のマイルストーンには、Iceberg や Delta Lake などのメタデータカタログとの統合、およびクライアントコードから直接 Quack‑Cluster の機能を公開する専用 Python SDK の開発が含まれます。ETL パイプラインの必要性を排除することで、Quack‑Cluster はインフラコストを削減し、データエンジニア、分析者、およびスケーラブルでコスト効率の高いクラウド分析を求める企業にとって解析ワークフローを簡素化します。
プロジェクト状況
Quack‑Cluster は MIT ライセンスのオープンソースプロジェクトで、GitHub 上でホスティングされています。AI ツールはドキュメント作成を支援しますが、すべてのコア開発、デバッグ、およびテストは人間によって行われます。
本文
🦆 クアック・クラスタ
DuckDB と Ray を組み合わせたサーバーレス分散 SQL クエリエンジン
クアック・クラスタは、オブジェクトストレージ(例:AWS S3 や Google Cloud Storage)に保存されたデータに対して、複雑な SQL クエリを直接実行できる高性能かつサーバーレスの分散 SQL エンジンです。Python、Ray 分散計算フレームワーク、および超高速 DuckDB アナリティクスデータベースを組み合わせており、大規模ビッグデータシステムに代わる軽量で理想的な選択肢となります。
✨ 主な特徴
- サーバーレス & 分散 – Ray クラスター上でスケーラブルに SQL を実行し、サーバーインフラを管理する必要はありません。
- 高速 SQL 処理 – DuckDB のメモリ内カラム指向ベクトル化エンジンと Apache Arrow を活用した極めて高速な分析が可能です。
- データの所在でクエリ実行 – Parquet、CSV などをオブジェクトストレージやローカルファイルシステムから直接読み込み、ETL は不要です。
- Python ネイティブ統合 – Python で構築されており、データサイエンス・エンジニアリング・ML のワークフローにシームレスに組み込めます。
- オープンソーススタック – FastAPI、Ray、DuckDB、SQLGlot などを採用しています。
🏛️ 構成図
ユーザー → コーディネーター (FastAPI + SQLGlot) → Ray クラスター ↘︎ ┌───────────────────────┐ │ ワーカー 1 │ │ (Ray Actor + DuckDB) │ └────────▲────────────────┘ │ ┌────────▼────────────────┐ │ ワーカー N │ │ (Ray Actor + DuckDB) │ └────────▲────────────────┘ │ データソース (S3 / GCS / ローカル)
- クライアント が標準的な SQL クエリをコーディネーターの API エンドポイントへ送信。
- コーディネーターがクエリを解析し、対象ファイル(例:
)を特定して分散実行計画を構築。s3://my-bucket/data/*.parquet - Ray がタスクを複数のワーカーへディスパッチしてオーケストレーション。
- 各 ワーカー は自身のデータサブセットに対し埋め込み DuckDB インスタンスで処理。
- 部分結果はコーディネーターで集約され、クライアントへ返却。
この設計により、大量ファイル集合上での SQL クエリを大規模並列処理(MPP)で実行できます。
🚀 始め方
前提条件
- Docker
(Linux/macOS には標準装備、Windows は WSL 経由で利用可)make
インストール & 起動
# 1. リポジトリをクローン git clone https://github.com/your-username/quack-cluster.git cd quack-cluster # 2. サンプルデータ生成(./data に Parquet ファイル作成) make data # 3. クラスター構築・起動 # Ray のヘッドノード + N 個のワーカーノードを起動 make up scale=2
クラスターは稼働中です!
Ray ダッシュボードは http://localhost:8265 で確認できます。
👨🏫 チュートリアル:分散 SQL クエリの実行
任意の HTTP クライアント(curl、Postman 等)を使い、
http://localhost:8000/query にクエリを送信します。
curl -X POST \ http://localhost:8000/query \ -H 'Content-Type: application/json' \ -d '{ "sql": "SELECT product, SUM(sales) AS total_sales FROM \"data_part_*.parquet\" GROUP BY product ORDER BY product" }'
期待される出力
{ "result": [ {"product":"A","total_sales":420.0}, {"product":"B","total_sales":400.0}, {"product":"C","total_sales":300.0} ] }
🚀 Postman でテスト
-
コレクションと環境をインポート
documentation/postman_collection/QuackCluster_API_Tests.jsondocumentation/postman_collection/QuackCluster_postman_environment.json
-
環境を有効化 – Postman で「Quack Cluster Environment」を選択。
-
リクエスト送信 – ベース URL は
に設定されています。http://127.0.0.1:8000
💡 サポートされる SQL 機能
| カテゴリ | 容易 |
|---|---|
| 基本クエリ | , , , , , |
| 集約関数 | , , , , |
| 分散結合 | , , (ファイルセット間) |
| 高度な SQL | サブクエリ、CTE ()、ウィンドウ関数 () |
| ファイルシステム関数 | グロブパターン ()、、 |
🛠️ 開発・管理コマンド
| コマンド | 説明 |
|---|---|
| N 個のワーカーでクラスターを起動。 |
| 実行中コンテナを安全に停止・削除。 |
| すべてのサービスログを tail 表示。 |
| コード変更後に Docker イメージ再構築。 |
| ray‑head コンテナ内で pytest スイート実行。 |
| 注意 – コンテナ停止とすべてのデータボリューム削除。 |
🗺️ プロジェクトロードマップ
- ✅ 分散 JOIN 機能
- ✅ ウィンドウ関数(OVER, PARTITION BY)
- 🔜 メタデータカタログ統合(Apache Iceberg、Delta Lake)
- 🔜 開発者体験を向上させる専用 Python SDK
🤝 貢献
ご協力大歓迎です!Issue を立てるか Pull Request を送信してください。すべてのコア設計決定とテストは人間によってレビューされ、品質が保証されています。
🤖 AI 主導開発
本プロジェクトでは AI ツールを活用して開発速度とドキュメント作成を加速していますが、重要なアーキテクチャ設計・デバッグ・最終テストはすべて人間によって行われます。
📄 ライセンス
MIT © 2026 Quack‑Cluster。詳細は LICENSE ファイルをご覧ください。