duckdb.org 5日前

How DuckDB Runs Recursive CTEs Faster

DuckDB v2.0では再帰CTEの実行エンジンを刷新し、各イテレーション(epoch)ごとに使い捨てていたパイプラインスケジュールやハッシュビルドなどの実行状態を、再帰不変な部分は呼び出し(invocation)スコープで再利用するよう変更した。ジョインの向きを再構成して不変な辺テーブル側をビルド側に固定する、フロンティアの実サイズに応じてinline実行とスケジュール実行を動的に切り替える、USING KEYのキー付き状態を凍結したハッシュテーブルとして直接プローブ可能にする、といった最適化により、到達可能性クエリで4.051秒から0.095秒へ42.6倍高速化した。また意味論的な変更として、USING KEY ... UNIONで実際に変化した新規/更新キーのみを次イテレーションに伝播するようにした。

DuckDB v2.0では再帰CTEの実行エンジンを刷新し、各イテレーション(epoch)ごとに使い捨てていたパイプラインスケジュールやハッシュビルドなどの実行状態を、再帰不変な部分は呼び出し(invocation)スコープで再利用するよう変更した。ジョインの向きを再構成して不変な辺テーブル側をビルド側に固定する、フロンティアの実サイズに応じてinline実行とスケジュール実行を動的に切り替える、USING KEYのキー付き状態を凍結したハッシュテーブルとして直接プローブ可能にする、といった最適化により、到達可能性クエリで4.051秒から0.095秒へ42.6倍高速化した。また意味論的な変更として、USING KEY ... UNIONで実際に変化した新規/更新キーのみを次イテレーションに伝播するようにした。
↗ 元記事を開く
duckdb.org 5日前

DuckDB Table Functions in Java

DuckDB Java クライアントが純粋な Java でテーブル関数を書けるようになった。C++ 拡張のビルドなしに、MongoDB など Java ドライバでアクセスできる任意のデータソースを SQL のテーブル関数として登録でき、ローカルの Parquet/CSV とジョインできる。bind/init/apply の3コールバックで実装し、フィルタは各ソースの元のクエリ言語のまま渡される。現状は DuckDB 拡張としてのパッケージ化不可、リソースの自動解放なし、STRUCT/LIST 等の複合型は未対応という制限がある。

DuckDB Java クライアントが純粋な Java でテーブル関数を書けるようになった。C++ 拡張のビルドなしに、MongoDB など Java ドライバでアクセスできる任意のデータソースを SQL のテーブル関数として登録でき、ローカルの Parquet/CSV とジョインできる。bind/init/apply の3コールバックで実装し、フィルタは各ソースの元のクエリ言語のまま渡される。現状は DuckDB 拡張としてのパッケージ化不可、リソースの自動解放なし、STRUCT/LIST 等の複合型は未対応という制限がある。
↗ 元記事を開く