DuckDB 2.0.0 released with async Parquet I/O and Spark dialect mode
DuckDB 2.0.0 'Cyanoptera' adds asynchronous Parquet read/write, a Spark compatibility mode, aggregate state export for more functions, and CTE-based optimizations for rollup/cube queries.
Summary
DuckDB 2.0.0 'Cyanoptera' is now available. The release introduces asynchronous I/O for Parquet files on local storage, a new dialect_compatibility_mode='spark' setting for Spark SQL compatibility, and performance improvements including CTE-based cascading aggregation for rollup/cube/grouping sets queries. Aggregate state export has been expanded to cover quantile, median, mad, list, any_value/first/last, arg_min/arg_max, string_agg, and ordered aggregates. Other additions include static linking support for C-API extensions, MERGE INTO in triggers, and RETURNING support for tables with triggers.
What's new in DuckDB 2.0.0
- Async Parquet I/O: Both reads and writes to Parquet files are now asynchronous for local files, with a new
debug_local_file_system_delay_mssetting for testing async behavior - Spark dialect mode: New
SET dialect_compatibility_mode='spark'enables Spark SQL compatibility - CTE-based aggregation optimization: Rollup, cube, and grouping sets queries are now folded into CTEs to enable cascading aggregation for better performance
- Expanded aggregate state export: Now supports quantile, median, mad, list, any_value/first/last, arg_min/arg_max, string_agg, and ordered aggregates
- Static linking for C-API extensions: Extensions can now be statically linked via the C API
- Trigger enhancements: MERGE INTO is now allowed in triggers, and RETURNING clauses work with tables that have triggers
- Variant type improvements: New
variant_array_length,variant_comparator,VariantIterator, and better shredded vector handling
Why it matters
The async Parquet I/O and Spark compatibility mode lower barriers for data engineers migrating from Spark pipelines, while the expanded aggregate state export enables more efficient incremental analytics workflows.
What to do
- Update to DuckDB 2.0.0 'Cyanoptera' to get async Parquet I/O and Spark SQL compatibility.
- Set
dialect_compatibility_mode='spark'if you need Spark SQL compatibility. - Use
debug_local_file_system_delay_msto test async Parquet behavior on local files. - Watch for improved performance in rollup, cube, and grouping sets queries via CTE-based optimization.
Original reference: github.com →