Skip to content

v0.9.0 — nested & JSON columns, 1,000-column tables

Choose a tag to compare

@jeyabbalas jeyabbalas released this 08 Oct 20:06
668043a

Highlights

  • Nested & JSON columns. Lists, arrays, structs, maps, unions and VARIANT load as type: 'nested': readable cells, a type outline and summary chart in the header, a value inspector (F2), "Extract field → column", exact reads (getCellValue, getColumnValues) and JSON-correct exports.
  • 1,000-column tables. Only the columns near the view are rendered, fetched and charted, and Parquet is read from disk with a memory pre-check, so a 200K × 1,000 file loads in the browser.

Breaking changes

Most integrations upgrade with a version bump. These five changes can break one; the 0.8 → 0.9 migration guide walks through each, and lists the other behaviour changes upgraders may notice.

  1. A custom visualization or stats panel registered for 'string' no longer receives nested columns, nor TIME_NS columns, which are now 'time'.
  2. getColumnValues returns MAP, UNION, TIME WITH TIME ZONE and TIME_NS values in new forms.
  3. A self-hosted copy of the worker script must be replaced, and an offline deployment with nested data must serve DuckDB's json extension. The CSP and offline guide now gives a working recipe: the files to copy, the extensions to mirror and the policy to send.
  4. CSV, JSON and clipboard exports write dates and times as ISO 8601 text, not epoch numbers.
  5. VisualizationFactory, deprecated since 0.3.1, is removed from /advanced.

The @duckdb/duckdb-wasm peer range is now ^1.33.1-dev57.0.

Known issues

  • With extensions.duckdb.org out of reach (offline, blocked, or missing from connect-src), every load fails, a CSV's too, with LOAD_PARSE_FAILED: a load sets DuckDB's time zone, which needs the icu extension. Mirror the extensions as the CSP and offline guide describes.
  • CSV and JSON sources lose a seventh fractional-second digit: DuckDB's readers type ISO timestamps before the library's lossless check sees them. Text columns in Parquet keep every digit.
  • After a Parquet load fails with LOAD_MEMORY_EXCEEDED, the grid stays empty until the next load succeeds.
  • A range filter whose ends fall inside a histogram's bins is drawn as the whole bins it touches. The filter and its row count are exact.
  • A TIME or TIME WITH TIME ZONE brush is redrawn one bar wider than brushed. The filter, its chip and the row count are right.
  • With another column's filter on, a histogram's stats line shows the whole table's min and max beside the filtered rows' median.
  • On a chart that draws a single bar, a brush can go undrawn after the chart refetches. Its filter, chip and counts stay.
  • An INTERVAL column mixing months with days or times can put a value near a brush's bound on the other side of it from its bar: DuckDB counts a month as 30 days.
  • DuckDB 1.5.4 limits: Parquet drops TIME WITH TIME ZONE offsets; UNION and unnamed-STRUCT Parquet exports don't load again; a VARIANT inside a list or struct doesn't export to Parquet; HUGEINT exports to Parquet as DOUBLE.

Full list of changes: CHANGELOG.md.