DuckDB v2.0 のプレビュー

2026/08/17 22:46

DuckDB v2.0 のプレビュー

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

要約

Japanese Translation:

DuckDB v2.0、コードネーム「Cyanoptera」は、単独の分析ツールから、複雑なトランザクションワークロードを処理できる堅牢なマルチテナントサーバープラットフォームへの中道的変化を象徴しています。この大規模なアップグレードでは、

quack
エクステンションによるネイティブクライアント/サーバーアーキテクチャ、同時操作時のデータ完全性を確保するためのフル MVCC サポート、および従来のエンジンに代わるモダンな PEG ベースのパーサーを中心とした破壊的変更が導入されました。優れたパフォーマンスを実現するために、このリリースは遠隔接続を高速化するための非同期 I/O および、ファイル全体をスキャンせずともデータインデックスへの即座アクセスを可能にするストレージ v2.0 のような最適化されたストレージフォーマットを採用しています。技術的には、タイムゾーン論理をコアシステムに埋め込み、ICU などの外部ライブラリへの依存を排除し、宣言的な YAML 仕様から生成される安定した C API を導入しました。ユーザーはバッファー管理を必要とする新しいデフォルトストレージ方式への適応が求められますが、その対価は大きいです:組織は、PostgreSQL などの多様なデータベースに対してプッシュダウン最適化を適用した統合リモートクエリを実行でき、信頼できるローカルエクステンションリポジトリによる強化されたセキュリティを楽しむことができ、SQL レベルのトリガーや
VARIANT
タイプ、ベクトル検索機能など高度な機能を活用できるようになりました。

本文

DuckDB バージョン 2.0:「シナモンテール」の名で登場!サーバー化や非同期 I/O など、革命的な新機能が多数搭載

DuckDB バージョン 2.0 は、「シナモンテール(Anas cyanoptera)」 という名前が付けられています。西アメリカに生息し、鮮やかな赤褐色の羽を持つ水鳥です。

単なる形式的な手続きではなく、昨年のバージョン 1.5 以降の 1 万回超のコミットを踏まえた「機能強化版」です。「データレイクハウス(Lakehouse)」の年に焦点を当てた前作に対し、今回は**「DuckDB をサーバーとして利用する年」**の幕開けとなる大規模リリースです。

以下の項目にて、バージョン 2.0 の主な新機能を整理します。


1. DuckDB as a Server: Quack and CONNECT

DuckDB はプロセス内データベースとしての設計でしたが、クライアント/サーバーモードへの要望に応えるため遂に実装されました。

  • quack
    拡張機能:

    • DuckDB 固有のプロトコルを実装し、他の DuckDB インスタンスと通信可能にします。
    • 直前のプレビュー版を踏まえ、バージョン 2.0 で安定版として一般公開されます。
    • マルチテナントかつ長期稼動の展開に対応したクライアント/サーバーアーキテクチャを実現します。
  • CONNECT
    ステートメント:

    • 新しいリモートデータベースへの接続機能を標準化します。
    • 従来のワークアラウンド
      remote.query($...$)
      に代わり、SQL を直接 PostgreSQL や MySQL などへ送信する新しいリモート・プッシュダウン最適化機能を備えています(#22914)。
-- サーバーへの接続とクエリ実行
CALL quack_serve(token = 'my_token');

ATTACH 'quack:server.example.com' AS qk (TOKEN 'my_token');
CONNECT qk;
SELECT count(*) FROM events; -- サーバー上で実行され、結果がストリームで戻ってくる
DISCONNECT;
  • トランザクション対応の強化:

    • 単一ユーザー用途では不要だったため未実装でしたが、**完全な MVCC(多値同時制御)**とトランザクション隔離機能を備えています。
    • トランザクション処理において PostgreSQL などと競合する十分な速度を持ち、長期運用に適しています。
  • 観測可能性(Observability)の向上:

    • より優れたメトリクス、ログ、監視機能を実装(#22799)。
    • 一部のユーザーが独自にクライアントを実装したほど需要が高いプロトコルです。

2. VARIANT が第一級市民として確立

バージョン 1.5 で導入された

VARIANT
型が、「ステロイド入りの JSON」(高速化された JSON)として定着しました。

  • 主要特徴:

    • テキスト形式の JSON と異なり、DuckDB が自動的に共通構造を検出し**「シャレッド(shred)」**することで、ストレージ効率とクエリ速度が向上します。
    • スキーマ宣言不要で、リアルタイムログのストリーム進化にも対応します。
  • バージョン 2.0 の新機能:

    • ストレージからのシャレッド実行(#20912)
    • スキャンへの抽出プッシュダウン(#22478)
    • Parquet 向けの VARIANT リード/ライト
    • variant_*
      関数の追加
CREATE TABLE events (payload VARIANT);
INSERT INTO events
    VALUES ('{"user": {"id": 42, "tags": ["a", "b"]}}'::JSON::VARIANT);

-- 構造の確認とフィルタリング
SELECT variant_type(payload), variant_keys(payload) FROM events;
SELECT *
    FROM events
    WHERE variant_contains(payload, {'user': {'id': 42}}::VARIANT);
  • 将来の展望:
    • 通常
      JSON
      型にも VARIANT の利点を提供予定であり、既存の JSON ワークロードが恩恵を受けます。

3. トリガー機能の実装

長年要望され、バージョン 2.0 で完全に実装されました。

  • 対応するタイプ:

    • BEFORE
      および
      AFTER
      トリガー
    • FOR EACH ROW
      および
      FOR EACH STATEMENT
    • REFERENCING OLD/NEW TABLE
      を通じたトランジションテーブル
    • 複数トリガー、
      RETURNING
      サポート、
      DROP TRIGGER
  • 古典的なユースケース(監査):

    • データ変更を自動記録する仕組みです。
CREATE TABLE target (id INTEGER, val INTEGER);
CREATE TABLE audit (id INTEGER, old_val INTEGER, new_val INTEGER);

-- トリガー定義
CREATE TRIGGER trg_audit AFTER UPDATE ON target
    REFERENCING OLD TABLE AS o NEW TABLE AS n
    FOR EACH STATEMENT
        INSERT INTO audit
        SELECT n.id, o.val, n.val FROM o JOIN n ON o.id = n.id;

INSERT INTO target VALUES (1, 10), (2, 20);
UPDATE target SET val = val * 10 WHERE id <= 2;
SELECT * FROM audit;

-- 結果
-- | id | old_val | new_val |
-- |----|---------|---------|
-- | 1  | 10      | 100     |
-- | 2  | 20      | 200     |

4. SQL ダイアレクトの追加機能

DuckDB の SQL ダイアレクトは継続的に進化し、以下の主要機能が追加されました。

  • NEAREST ジョイン(#24137):
    • トップ-k 類似度検索をジョイン節として実装。
    • ベクターや埋め込みデータへのワークロードに対応します。
SELECT q.user_id, t.product_id
    FROM users q
        INNER JOIN products t APPROX NEAREST 2
        BY SIMILARITY array_cosine_similarity(q.embedding, t.embedding);
  • CTE 内の DML(#21634, #21997, #24217):
    • WITH
      ステートメント内で
      INSERT
      ,
      UPDATE
      ,
      DELETE
      ,
      COPY
      を利用可能。
WITH moved AS MATERIALIZED (
    DELETE FROM staging RETURNING *
)
INSERT INTO archive SELECT * FROM moved;
  • ネストされたスキーマ(#23492, #24222):
    • スキーマの中に別のスキーマを作成可能。
CREATE SCHEMA finance.reports;
CREATE TABLE finance.reports.q3 (revenue DECIMAL);
  • 新しい変数構文(#21194):
    • 式が許可される場所であれば
      $x
      と表記でき、冗長な
      getvariable()
      が不要。
SET VARIABLE threshold = 100;
SELECT * FROM orders WHERE amount > $threshold;
  • JSON 変換関数(#23786):

    • json_set
      ,
      json_insert
      ,
      json_replace
      ,
      json_remove
      で JSON のインプレイス修飾が可能。
  • 再帰的 CTE と

    USING KEY
    アグリゲーション:

    • 純粋な SQL による反復アルゴリズムの実行が可能に(#19481)。
WITH RECURSIVE tbl(a, b) USING KEY (a, avg(b)) AS (
    SELECT 1, 5 UNION
    SELECT a, b - 1 FROM tbl WHERE b > 0
) TABLE tbl;
  • その他機能:
    FETCH FIRST 2 ROWS ONLY
    (#23533)、
    OVERLAY()
    (#22456)、GROUP BY での
    UNNEST
    (#23644)、明確な
    MERGE
    セマンティクス (#24058) など。

5. 非同期 I/O の導入

S3 などのオブジェクトストレージ連携において、DuckDB の体験を根本的に向上させます。

  • 対応範囲:

    • エンジン全体で非同期 I/Oを実装。
    • I/O レイヤーがクエリ処理レイヤーから独立し、大幅な並列性を実現。
  • 対象フォーマット順:

    1. Parquet サポート(#23662)
    2. CSV (#23961)
    3. DuckDB 固有のファイル形式 (#24654)
    4. 非同期 Parquet ライト (#23283)
    5. 新しい MMAP/DIRECT_IO モード (#22988)
  • 効果:

    • 特にネットワークストレージにおいて劇的なクエリ速度の向上が見られます。

6. 全般的なクエリ速度の向上

ユーザーが変更を加えることなく、以下の最適化により既存クエリが高速化されています。

  • ハイライト機能:
    • 部分的アグリゲーションがジョインの下にプッシュ(#22572)
    • 冗長なアグリゲーションの再利用(#24543)
    • 再帰的 CTE エンジンの書き換え(#22211)
    • メモリ超過時のディスク処理強化(#24499)
    • Windows CLI のマルチスレッド結果マテリアライゼーションが約 2.2 倍高速化(#24036)

マイクロベンチマーク:再帰的 CTE

100 万の辺を持つグラフに対する到達可能ノード検索において、DuckDB v2.0 は約 40 倍の高速化を達成しました。

CREATE TABLE edges AS
    SELECT (range % 100_000)::INTEGER AS src,
           ((range * 13 + 7) % 100_000)::INTEGER AS dst FROM range(1_000_000);

WITH RECURSIVE reachable(node) AS (
    SELECT 0 UNION
    SELECT dst FROM edges, reachable WHERE src = node
) SELECT count(*) FROM reachable;
バージョン実行時間
DuckDB v1.5.44.90 s
DuckDB v2.0 (プレビュー)0.12 s

行グループのトリミング(Row-Group Pruning)強化

以下のデータ型や条件でも効率的にデータをスキップできるようになりました。

  • 最小・最大インデックス(ゾーンマップ)
  • Parquet ブルームフィルター
  • 構造化データ、リスト、小数点以下、UUID、IN フィルター、関数述語への対応
-- これらは今や効率的に処理されます
SELECT * FROM logs WHERE contains(message, 'ERROR');
SELECT * FROM t WHERE substr(code, 1, 3) = 'NL-';
SELECT * FROM 'data/*.parquet' WHERE id IN (1, 5, 9);

クエリ計画とパーティション認識型(Partition-Aware)

  • プランナーが既存のパーティションを最大限活用。
  • データセット全体のスキャンか大部分のスキップかの決定的な違いを生みます。
  • パーティション付きライティングも再設計されました(#22225, #22620)。

7. ストレージ形式 バージョン 2.0

デフォルトのストレージ形式が v2.0.0 にアップグレードされます(#22875)。

  • 主な変更点:

    • バッファー管理された ART インデックス (#21458, #23605)
      • インデックスをメモリに固定し、大規模テーブルでも即座に開き、必要時だけページ単位で読み込み。
    • カラムメタデータの遅延読み込み (#22333)
      • 広範囲のテーブルも高速化。
    • 辞書ベース圧縮
      DICT_FSST
      のデフォルト有効化
      (#23733)
    • 削除操作のコンパクトな格納(#24336)
    • ストレージ層での強力な破損検出
  • 効果:

    • 大規模インデックスを持つデータベースや広範囲テーブルにおいて、開く速度向上とメモリ使用量の劇的な減少を実現。

8. 全新型 SQL パーサー

長年 PostgreSQL から派生したパーサーを使用しましたが、バージョン 2.0 で独自の現代的な PEG ベースのパーサー(#22194)へ移行します。

  • 特徴:
    • 拡張機能エコシステムと連携し、新しい SQL 構文を定義可能にします。
    • 正確なソース位置を持つエラーメッセージ、最初のダイアレクト互換モードをサポート。
SET dialect_compatibility_mode = 'spark';
  • 互換性:
    • 設計上、旧来のクエリに対しては動作変化がないことを保証しています。

9. ICU ライブラリの廃止とネイティブ実装の採用

タイムゾーン、カレンダー、コラージョン機能の提供元を、ICU ライブラリから完全に変更

  • 変更内容:
    • icu
      拡張機能がタイムゾーンなどを担当(#24463, #24403)。
    • IANA データベースから直接構築され、約 45 KB に圧縮。
    • 以前と同じ動作を保証しつつ、より小さく高速化。

ベンチマーク結果

MacBook 上の簡易テスト(タイムゾーン変換:2,500 万行 / コラージョン:500 万件)で以下の速度向上を記録。

クエリv1.5.4 (ICU)v2.0 (ネイティブ)速度向上
ts AT TIME ZONE
(2,500 万行)
0.24 s0.11 s2.2 倍
COLLATE de
(500 万件)
0.15 s0.06 s2.6 倍

10. 拡張機能:一度記述すれば、ご自身でホスト可能

DuckDB の安定した C API が拡充され、拡張機能開発のパラダイムが変化します。

  • C API の安定化:

    • 一度記述しビルドすれば、ほぼ永遠に動作し続ける仕組みを実現。
    • 宣言的でバージョン管理された仕様(YAML)から生成(#24135)。
    • 統一されたシンボルバージョニング、カスタムアロケーター、静的リンキング機能付き。
  • 自己ホスト型拡張機能:

    • 組織自らが拡張機能をホスト・署名し、組み込みのものと同じようにインストール可能に(#24777)。
#include "duckdb_extension.h"

DUCKDB_EXTENSION_ENTRYPOINT(duckdb_connection con, ...) {
    // スカラー関数の登録処理
}

リポジトリの登録と利用

  • 独自の信頼済みリポジトリを登録・使用できます。
  • RSA 公開鍵による署名検証でセキュリティを保証。
  • ローカルパス、HTTPS、S3 などをプレフィックスとして利用可能。
SET allow_extension_repositories = 'allowed';

-- リポジトリの作成と登録
CREATE EXTENSION REPOSITORY my_repo FROM 'https://extensions.example.org';
INSTALL my_ext FROM my_repo;
LOAD my_repo/my_ext;

-- オフライン環境や鍵ローテーション対応もサポート
CREATE EXTENSION REPOSITORY my_repo FROM 's3://my-bucket/extensions'
    USING PUBLIC KEY '-----BEGIN PUBLIC KEY----- ...';

ボーナス:DuckDB Foundation アドバイザリーボード

秋から、利害関係者によるアドバイザリーボードが DuckDB Foundation に追加されます。

  • 役割: DuckDB、DuckLake、および Quack の開発ロードマップに対する意見提言。
  • 効果: 主要な利害関係者がプロジェクトの方向性に発言権を持ちます。

最終的な所見

本稿はプレビュー版であり、リリース直前の秋に詳細が若干変化することがあります。ただし、DuckDB v2.0 は新しいデフォルトストレージ形式Lambda 構文への移行など、いくつかの互換性のない変更点を含みます(リリースアナウンスメントにて詳しく説明)。

バージョン 1.5 以降、1 万回超のコミットとコミュニティの多大な貢献により、この大規模な進化が可能になりました。プレビュービルドで機能を確認し、Issues にご報告ください。

同じ日のほかのニュース

一覧に戻る →

2026/08/18 2:54

Rust の GPU オフロード:ポータブルで安全かつ高速

## 日本語の翻訳: 要約: 最も重要な進歩は、Rust および LLVM に組み込まれた新しいゼロオーバーヘッド GPU コンパイルフレームワークであり、これは高実行速度とメモリー安全性という歴史的なトレードオフを成功裏に解消します。従来、開発者は効率性のために不安全な生ポインタを選択するか、NVIDIA や AMD などの単一ハードウェアプロバイダーに縛られるベンダー固有の言語に依存する别无選択でした。この解決策は、Rust の厳格な型システムと所有権規則を活用してデータ転送を安全に管理し、LLVM のオフロードインフラストラクチャおよび専門的な 2 パスコンパイルパイプラインを利用することで、複雑なメモリー移動やクロスベンダー間フェースの不整合を自動的に処理することにより、このジレンマを解消します。その結果、ユーザーは現在、危険な unsafe ブロックを使用せずに、またはプロプライエタリなドメイン固有言語に依存せずに、高パフォーマンスの GPU コードを書くことができます。RAJAPerf ベンチマークでの初期評価では、システムが GPU カーネルに対して競合する中間コードを生成しており、これによりネイティブで手動最適化された C++ ソリューションと同等かそれ以上の性能を発揮できる可能性があります。この統一アプローチにより、企業はデータ転送を最適化しながらも、セキュリティと異なるハードウェアベンダーへの移植性を維持することが可能になります。

2026/08/17 23:18

生成 AI を使用した GitHub Copilot の「自動修正」機能で、Snowflake の Jira が侵害された件

## 日本語翻訳: # ルール - 元の意味を正確に保ってください(追加・省略なし)。 - 文書構造(見出し、箇条書きなど)を維持してください。 - 技術用語は正確に保ってください(API、LLM、zero-trust は自然な日本語がある場合を除いてそのまま使用)。 - トーンと確信度を維持してください。 - まとめ、説明、改変を行わないでください — 翻訳のみを実行してください。 # 出力形式 ## 日本語翻訳: (ここに日本語翻訳を記述します) ## 翻訳対象のテキスト: 改善は不要です — このサマリーは、推論や曖昧さを加えずにすべての主要点を正確かつ明確に反映しています。

2026/08/17 22:35

GitHub.com のインシデント

## Japanese Translation: 2026 年 8 月 17 日、GitHub は認証、コード操作、Copilot などの AI 機能に影響を与える大規模なシステム全体障害を正式に解決した。プラットフォームはパフォーマンスの安定化に向けてターゲットされた技術的調整を行い、UTC 時間 15:00 から 17:36 の間に発生した重大なサービス劣化を終結させた。当初、ユーザーは深刻な障害に直面し、Web 体験と API トラフィックでのエラー率は 20% に急上昇し、アーカイブまたは生レポジトリのダウンロードでは約 50% を記録した。これにより SAML/OIDC 認証、SCIM、チーム同期などの影響を受け、Git Operations、Webhooks、Issue、Pull Request、Actions、Pages、Copilot などの関連サービスも影響を受けた。 エンジニアたちは UTC 時間 18:11(当初の兆候は 17:34)に問題の原因となったコンポーネントを特定し、認証トークンのリトライ機能を部分的に無効化して安定性を回復させた後、その影響を確認した上で変更を完全に適用した。主な復旧後の一時的な間、認証機能において稀な失敗が数分残っていたが、UTC 時間 20:45 に予定されている Copilot の更新後にこれらは完全に解消すると予想される。この期間中、GitHub CLI およびアプリの利用は影響を受けなかったことが特筆すべき点である。正式な根本原因分析は将来のリリースで公開され、これらの広範囲にわたる問題を招いた具体的な技術的故障の内容を説明する予定である。GitHub の基幹インフラストラクチャに依存している組織は、この時間帯中に可用性の低下を経験したが、現在では通常の開発活動への完全な復旧が可能となっている。