
2026/10/21 23:01
DuckDB 2.0.0 LTS「シナモン・テール」
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
DuckDB チームは、約 20,000 コミットにわたる開発を経て重大なアーキテクチャ上の改善と新たな機能をもたらすバージョン 2.0.0 LTS(「Cinnamon Teal」)をリリースしました。この Long-Term Support リリースにより、少なくとも 2027 年 10 月まで安定性が保証され、先行する LTS バージョン(1.4 と新たに延長された 1.5)はそれぞれ 2026 年末から 2027 年 3 月までサポートが継続されます。
主な強化点には、リモート接続向けのアップグレードされた Quack プロトコルと、PostgreSQL や MySQL などのリモートデータベースを単一のコマンドで接続し、組み込みのリモートプッシュダウン最適化を実現する新しい CONNECT ステートメントの追加が含まれます。Parquet、CSV、ネイティブ形式に対して非同期 I/O が導入され、I/O レイヤーが独立してスケール可能となり、S3 などのオブジェクトストレージシステムにおけるパフォーマンス向上を達成しています。
VARIANT タイプは現在完全に統合されており、DuckDB が一般的な構造を自動的に検出し、「shreds」処理を施すことで圧縮率と速度を改善し、variant_*関数を用いたエンドツーエンドの読み書きを提供します。CLI のエージェントモードは、AI コーディングアシスタント(例:Claude Code や Cursor)下で動作する際に自動的に有効になり、コンパクトな Markdown 表、截断警告、早期クエリ終了、JSON エラー報告を出力し、TPC-H 実験においてモデルからの出力量を 59% 削減しました。
モダンで拡張可能な PEG ベースの SQL パーサーが、従来の YACC/Bison システムに代わってデフォルトとして採用され、拡張子が文法へフックできるようになり、エラーメッセージ内で正確なソース位置情報を提供します。改められた C API v2 では、ファイルシステムやテーブル関数などのコンポーネントを拡張子に公開し、組織は RSA 鍵検証付きの独自信頼済み拡張子リポジトリの登録とホスティングが可能になりました。
コア拡張機能には、DuckLake 1.1(新仕様の導入)、REST カタログ対応の Iceberg 拡張機能、およびタイムトラベルと VARIANT 処理の改善が Delta 拡張機能に含まれます。新しい SQL 機能は、CREATE TRIGGER ステートメント(BEFORE/AFTER、FOR EACH ROW/STATEMENT)、REFERENCING OLD/NEW TABLE、イベントあたりの複数のトリガー、表現式の簡潔表記として$variable をサポートしています。
しかし、互換性を壊す変更があるため組織側には慎重な計画が必要です:移行については、 upcoming の 11 月パッチリリースを待ってから行うことを推奨します。ユーザーは環境を更新し、C++17 をサポートするようする必要があります(Linux/macOS ではデフォルトで Clang を使用)。単一アローラムダ構文をデフォルトで無効にし、ICU ライブラリに代わるネイティブ時ゾーン実装を採用することで、時ゾーンデータサイズを約 45 kB に削減しますが、レガシー互換オプションは廃止されます。さらに、アメガレーションビルドは過度なサイズのため非推奨となり、macOS x86_64(osx_amd64)のコミュニティ拡張機能サポートはバージョン 2.1 時点で終了します。
本文
DuckDB 2.0.0 LTS(コードネーム「シナモン・テール」)リリース発表
DuckDB チームからのお知らせです。バージョン 2.0.0 LTSが正式にリリースされました。
- コードネーム: シナモン・テール [Spatula cyanoptera](西部アメリカの赤褐色の鴨に由来します)。
- 重要性: これまでの最大の機能リリースであり、安定性と機能の両面を向上させました。
- 開発期間: バージョン 1.5 リリース以来の約 20,000 コミットに基づいて構築されています。
📢 概要とサポート体制
レリースの性質
- バージョン 1.0: 安定性と後方互換性が主眼でした。
- バージョン 2.0: 機能リリースが主眼です(不変化の変更点への移行も必要)。
- 詳細情報: 「DuckDB v2.0 のプレビュー」記事や GitHub リリースノートで確認可能です。
📅 サポートスケジュール
今回のリリースに伴い、以下の 3 つのブランチが利用可能です。
| バージョン | タイプ | サポート期間 |
|---|---|---|
| 2.0 | LTS (長期サポート) | 2027 年 10 月まで |
| 1.4 | LTS | 2026 年 11 月下旬まで |
| 1.5 | サポート延長 | 2027 年 3 月まで (事実上の LTS) |
💡 ヒント: インストールは インストールページ を確認してください。CLI や Python クライアントは既に利用可能です(Go, R, Java など一部のライブラリや拡張機能の更新には数日かかる場合があります)。
🚀 主要新機能
サーバーとしての DuckDB & クアック (Quack)
DuckDB は従来、インプロセスデータベースでしたが、2.0 ではクライアント・サーバー構成への完全対応を実現しました。
- クアックプロトコル:
拡張機能によるネイティブプロトコル実装により、どのプロセスからでも DB サーバー化が可能に。quack - パフォーマンス向上: クライアントとサーバーが分離し、リソース管理が容易になりました。
🌐 CONNECT 文の導入(シンプル接続)
単一の命令でリモートデータベースへの接続・切り替えが可能です。
サーバー側の設定:
CALL quack_serve(token = 'my_token'); CREATE TABLE events (date DATE, name VARCHAR); INSERT INTO events VALUES ('2027-04-07', 'DuckCon #8');
クライアント側の接続:
ATTACH 'quack:localhost' AS qk (TOKEN 'my_token'); CONNECT qk; SELECT * FROM events;
※ デフォルトは
localhost へのみリッスンします。他のマシンからのアクセスにはリバースプロキシ(TLS ターミネーション)を挟む必要があります。
🖥️ CLI でのクアック対応
コマンドラインでも
-serve と -connect 引数で簡便な接続が可能です。
- リモートプッシュダウン: PostgreSQL や MySQL などのサポートされた DB に対して、クエリを直接送信する最適化機能を実装。
⚡ パフォーマンス:非同期 I/O
ファイル読み込みに非同期 I/Oが導入されました。
- 対応フォーマット: Parquet, CSV, 及び DuckDB ネイティブストレージ形式。
- メリット:
- I/O レイヤーとクエリ処理レイヤーの独立によるスケーリング。
- バックグラウンドでの同時読み込みによる並列化。
- 特に**オブジェクトストレージ (S3 など)**での実行速度が劇的に向上します。
🧬 VARIANT タイプが一等公民に
JSON などのスキーマレスデータを、列形式実行のパフォーマンスを維持して格納できるようになりました。
- 「ステロイド入りの JSON」: テキストではなく、構造体を保持した高性能な形式。
- 自動最適化 (Shredding): データ内の共通構造を検出し、圧縮効率と実行速度を向上。
- 関数ファミリー:
,variant_type()
などによる詳細な操作が可能。variant_keys()
CREATE TABLE events (payload VARIANT); INSERT INTO events VALUES ('{"user": {"id": 42, "tags": ["a", "b"]}}'::JSON::VARIANT), ('{"event": "click", "x": 10, "y": 20}'::JSON::VARIANT); SELECT variant_type(payload), variant_keys(payload) FROM events;
🤖 エージェントモード (CLI)
Claude Code や Codex などの AI エージェントが CLI を駆動する際、自動的に「エージェントモード」に切り替わります。
- 特性:
- 緊密な Markdown テーブル出力(パディングなし)。
- 結果の切り捨て通知、暴走クエリの早期停止。
- エラーを JSON 形式で報告。
- 長期実行クエリのコスト予測表示により、待機判断を支援。
- 効果: TPC-H 実験において、モデルの出力量が59% 削減されました。
🔧 拡張可能性:新しい SQL パーサー
PEG ベースの独自パーサーがデフォルトになりました。
- 利点:
- 構文追加時に既存ルールとの衝突リスクを回避(Python と同様、バージョン 3.9 で切り替え)。
- エラーメッセージに正確なソース位置を含める。
- 互換性: 旧パーサーとの完全互換性を確保しつつ、将来的な拡張が容易に。
必要に応じて旧パーサーに戻す方法:
SET enable_legacy_parser = true; INSTALL 'legacy_parser';
📦 拡張機能リポジトリ & C API v2
- C API v2: ファイルシステムやテーブル関数へのアクセスがより強力。
- 独自の信頼できるリポジトリ: 組織自らの拡張機能をホスト・署名し、ビルトインと同様にインストール可能に。
SET allow_extension_repositories = 'allowed'; CREATE EXTENSION REPOSITORY my_repo WITH PREFIX 'https://extensions.example.org'; INSTALL AND LOAD my_ext FROM my_repo;
💾 コア拡張機能の更新
- DuckLake 1.1: 新しい仕様のリリース。
- Iceberg: REST カタログ連携やメタデータ読み込み機能の完全対応へ。
- Delta Lake:
で Delta テーブル作成が可能になり、タイムトラベル・VARIANT 支援を強化。CREATE TABLE
🛠️ SQL 機能拡張
トリガー (Triggers)
テーブルイベントに応じて自動処理を行うトリガーが導入されました。
- 特徴:
/BEFORE
,AFTER
/FOR EACH ROW
,STATEMENT
/OLD
テーブル参照。NEW - 活用用途: 監査ログの記録、マテリアライズドビュー(集計テーブル)の自動維持など。
💡 マテリアライズドビューを逐次維持する例
-- 挿入時の処理:統計値を更新・追加 CREATE TRIGGER people_insert AFTER INSERT ON people REFERENCING NEW TABLE AS n FOR EACH STATEMENT MERGE INTO age_statistics s USING ( ... ) d ...; -- 削除時の処理:統計値を減算(空なら国籍削除) CREATE TRIGGER people_delete AFTER DELETE ON people REFERENCING OLD TABLE AS o FOR EACH STATEMENT MERGE INTO age_statistics s ...;
SQL 方言への追加
- 変数ショートカット:
の使用が可能($x
より簡潔)。getvariable('x') - データ修飾 CTE:
,INSERT
,UPDATE
,DELETE
をパイプラインとして利用可能。COPY - NEAREST JOIN: ベクトル・埋め込み検索への最適化。
- ネストされたスキーマ:
のように階層構造を定義可能。finance.reports - JSON 変異関数:
,json_set
などによるパッチ適用機能強化。json_insert
SQL 標準準拠対応:
サポート。FETCH FIRST
内のGROUP BY
許可。UNNEST
とMERGE
のセマンティクス明確化。UPDATE ... FROM
⚠️ 移行と廃止事項
🔄 2.0 への移行について
- 互換性: DuckDB 2.0 は既存の DB ファイルを読み書き可能ですが、2.0 以前のファイルは 2.0 で開けません。
- 推奨手順:
- シャドウシステムでテスト実施。
- ミッションクリティカルな場合は、初期パッチリリース(11 月頃)まで待つことを検討。
🚫 廃止事項とコンパイラ要件変更
| カテゴリ | 変更内容 | 代替案 / 備考 |
|---|---|---|
| コンパイラ | C++17 が必須 (旧 C++11) | リリースビルドのデフォルトは Clang に。 |
| タイムゾーン | ICU ライブラリ廃止 | 拡張機能で IANA データを圧縮して実装化(高速化)。 |
| ラムダ構文 | 単一矢印 () 無効化 | Python 風構法 () に変更。旧構文は で一時有効可。v2.1 で完全削除。 |
| アマルゲメート | ビルド機能廃止 | ソースの巨大化による維持困難を回避。 |
| macOS x86_64 | 段階的廃止中 | DuckDB 自体はサポート継続(コミュニティ拡張機能は非対応)。v2.1 で正式停止予定。 |
📝 詳細な移行ガイド: 移行ガイドページ を参照してください。
まとめ
DuckDB 2.0.0 は、クアックプロトコルの完成、非同期 I/O、VARIANT タイプの完全統合、そしてAI エージェント対応など、飛躍的な進化を遂げました。約 20,000 コミットの努力が結実した、安定かつ高性能な新しいバージョンです。
コミュニティからのフィードバックやコントリビューターに心より感謝申し上げます!