Databases & Storage

DuckDB 2.0.0 released with async Parquet I/O and Spark dialect mode

Key Takeaway

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_ms setting 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_ms to 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 →