--- warning: DO NOT CHANGE THIS MANUALLY, THIS IS GENERATED BY https://github.com/duckdb/community-extensions repository, check README there title: jsono excerpt: | DuckDB Community Extensions Analytics-optimized JSON storage — parse one time and read many times, and shred hot paths into typed columns for pushdown and row-group pruning extension: name: jsono description: Analytics-optimized JSON storage — parse one time and read many times, and shred hot paths into typed columns for pushdown and row-group pruning version: 0.1.2 language: C++ build: cmake license: MIT maintainers: - Flamefork repo: github: Flamefork/duckdb-jsono ref: 2de74326d63862c3c5c60a919e136d19b412d0ca docs: hello_world: | INSTALL jsono FROM community; LOAD jsono; -- A JSON document becomes a pre-parsed binary value. Queries navigate the -- binary structure and do not parse the text again. SELECT jsono_transform( jsono('{"id": 42, "name": "duck", "active": true}'), {id: 'BIGINT', name: 'VARCHAR', active: 'BOOLEAN'} ); -- {'id': 42, 'name': duck, 'active': true} -- With a shredding spec, the hot paths go into typed lane columns. -- The conversion is lossless: to_json gives the initial document back. SELECT to_json(jsono('{"kind":"commit","time_us":1700,"extra":"e1"}', shredding := '{"$.kind": "VARCHAR", "$.time_us": "BIGINT"}')); -- {"extra":"e1","kind":"commit","time_us":1700} extended_description: | `jsono` is analytics-optimized storage for JSON in DuckDB. `jsono(payload)` converts a JSON document into a pre-parsed binary value. Queries navigate that binary structure and do not parse the text again. The value is a plain nested `STRUCT`, so it goes through Parquet and DuckLake with no custom type. With `shredding := spec`, the same constructor also moves the hot paths (the paths that queries read most) into typed lane columns. An extraction or a filter on a shredded path becomes a direct read of a narrow typed column, which the planner pushes down and which prunes Parquet row groups. The conversion is lossless: `->>`, `to_json`, and the casts give the same answers as on a plain value, and a path with no lane stays in the residual. **Functions** - Build and convert: `jsono(json)` / `try_jsono(json)`, `jsono(struct)`, `to_json(value)`. - Extract and project: `jsono_extract` (`->`), `jsono_extract_string` (`->>`), `jsono_transform` (many fields into a typed `STRUCT`, in one pass), `jsono_entries`, `jsono_array_elements`. - Merge and aggregate: `jsono_merge_patch` (RFC 7396), `jsono_group_merge`, `jsono_group_merge_max` / `jsono_group_merge_min`, `jsono_diff`, `jsono_group_array` / `jsono_group_object`. - Shredded storage: `jsono(value, shredding := spec)`, `jsono_suggest_shredding` (a spec from a plain column), `jsono_shred_stats`. - Introspection of the document (`jsono_type`, `jsono_keys`, `jsono_array_length`), of the row (`jsono_validate`, `jsono_storage_size`, `jsono_shred_manifest`), and of the type (`jsono_layout_diagnose`, `jsono_layout_lanes`, `jsono_storage_type`). **Stability.** Stored values stay readable across upgrades: a newer release reads the values that an older release wrote. The SQL API is not frozen — function names and signatures can change while the version is `0.x`. **Maintenance** is best-effort, by one maintainer. Give feedback and contributions through GitHub. Full documentation, including the storage format and the pruning conditions: https://github.com/Flamefork/duckdb-jsono#readme extension_star_count: 2 extension_star_count_pretty: 2 extension_download_count: 4840 extension_download_count_pretty: 4.8k image: '/images/community_extensions/social_preview/preview_community_extension_jsono.png' layout: community_extension_doc --- ### Compatibility Matrix This table covers all DuckDB releases that have not reached [end-of-life](https://duckdb.org/release_calendar), including LTS releases, and shows the 2 most recent patch releases of each. Older patch releases are not listed, but the extension may be available for them as well.
| Platform | 1.4.4 | 1.4.5 | 1.5.5 | 1.5.6 | 2.0.0 | | :--- | :---: | :---: | :---: | :---: | :---: | | Linux AMD64 | ❌ | ❌ | ✅ | ❌ | ❌ | | Linux ARM64 | ❌ | ❌ | ✅ | ❌ | ❌ | | macOS AMD64 | ❌ | ❌ | ✅ | ❌ | ❌ | | macOS ARM64 | ❌ | ❌ | ✅ | ❌ | ❌ | | Windows AMD64 | ❌ | ❌ | ✅ | ❌ | ❌ | | Windows ARM64 | ❌ | ❌ | ❌ | ❌ | ❌ | | WebAssembly | ❌ | ❌ | ✅ | ❌ | ❌ | ### Installing and Loading ```sql INSTALL {{ page.extension.name }} FROM community; LOAD {{ page.extension.name }}; ``` {% if page.docs.hello_world %} ### Example ```sql {{ page.docs.hello_world }}``` {% endif %} {% if page.docs.extended_description %} ### About {{ page.extension.name }} {{ page.docs.extended_description }} {% endif %} ### Added Functions | function_name | function_type | description | comment | examples | |-----------------------------------|---------------|-------------|---------|----------| | __jsono_internal_checked_residual | scalar | NULL | NULL | | | __jsono_internal_reshred | scalar | NULL | NULL | | | __jsono_internal_strip_manifest | scalar | NULL | NULL | | | jsono | scalar | NULL | NULL | | | jsono_array_elements | scalar | NULL | NULL | | | jsono_array_length | scalar | NULL | NULL | | | jsono_diff | scalar | NULL | NULL | | | jsono_entries | scalar | NULL | NULL | | | jsono_extract | scalar | NULL | NULL | | | jsono_extract_string | scalar | NULL | NULL | | | jsono_group_array | aggregate | NULL | NULL | | | jsono_group_merge | aggregate | NULL | NULL | | | jsono_group_merge_max | aggregate | NULL | NULL | | | jsono_group_merge_min | aggregate | NULL | NULL | | | jsono_group_object | aggregate | NULL | NULL | | | jsono_keys | scalar | NULL | NULL | | | jsono_layout_diagnose | scalar | NULL | NULL | | | jsono_layout_lanes | scalar | NULL | NULL | | | jsono_merge_patch | scalar | NULL | NULL | | | jsono_overlay | scalar | NULL | NULL | | | jsono_shred_manifest | scalar | NULL | NULL | | | jsono_shred_stats | aggregate | NULL | NULL | | | jsono_storage_size | scalar | NULL | NULL | | | jsono_storage_type | scalar | NULL | NULL | | | jsono_suggest_shredding | aggregate | NULL | NULL | | | jsono_transform | scalar | NULL | NULL | | | jsono_type | scalar | NULL | NULL | | | jsono_validate | scalar | NULL | NULL | | | try_jsono | scalar | NULL | NULL | | ### Overloaded Functions | function_name | function_type | description | comment | examples | |---------------|---------------|-------------|---------|----------| | ->> | scalar | NULL | NULL | | | json_extract | scalar | NULL | NULL | | | json_quote | scalar | NULL | NULL | | | to_json | scalar | NULL | NULL | | ### Added Types This extension does not add any types. ### Added Settings This extension does not add any settings.