jsono
Analyseoptimierte JSON-Speicherung — einmal parsen und vielfach lesen sowie häufig genutzte Pfade in typisierte Spalten zerlegen für Pushdown und Row-Group-Pruning
Maintainer: Flamefork
Installation und Laden
INSTALL jsono FROM community;LOAD jsono;Beispiel
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}Über jsono
jsono ist eine analyseoptimierte Speicherung für JSON in DuckDB.
jsono(payload) wandelt ein JSON-Dokument in einen vorgeparsten Binärwert um.
Abfragen navigieren in dieser Binärstruktur und parsen den Text nicht erneut. Der
Wert ist ein gewöhnliches verschachteltes STRUCT und geht daher durch Parquet und DuckLake
ohne eigenen Typ.
Mit shredding := spec verschiebt derselbe Konstruktor außerdem die häufig genutzten Pfade (die
Pfade, die Abfragen am häufigsten lesen) in typisierte Lane-Spalten. Eine Extraktion oder ein
Filter auf einem zerlegten Pfad wird zu einem direkten Lesen einer schmalen typisierten Spalte,
die der Planer per Pushdown nutzt und mit der Parquet-Row-Groups entfernt werden. Die
Umwandlung ist verlustfrei: ->>, to_json und die Casts liefern dieselben
Antworten wie bei einem einfachen Wert; ein Pfad ohne Lane bleibt im Residual.
Funktionen
- Erzeugen und umwandeln:
jsono(json)/try_jsono(json),jsono(struct),to_json(value). - Extrahieren und projizieren:
jsono_extract(->),jsono_extract_string(->>),jsono_transform(viele Felder in ein typisiertesSTRUCT, in einem Durchgang),jsono_entries,jsono_array_elements. - Zusammenführen und aggregieren:
jsono_merge_patch(RFC 7396),jsono_group_merge,jsono_group_merge_max/jsono_group_merge_min,jsono_diff,jsono_group_array/jsono_group_object. - Zerlegte Speicherung:
jsono(value, shredding := spec),jsono_suggest_shredding(eine Spezifikation aus einer einfachen Spalte),jsono_shred_stats. - Introspektion des Dokuments (
jsono_type,jsono_keys,jsono_array_length), der Zeile (jsono_validate,jsono_storage_size,jsono_shred_manifest), und des Typs (jsono_layout_diagnose,jsono_layout_lanes,jsono_storage_type).
Stabilität. Gespeicherte Werte bleiben über Upgrades hinweg lesbar: eine neuere Version
liest die Werte, die eine ältere Version geschrieben hat. Die SQL-API ist nicht eingefroren —
Funktionsnamen und Signaturen können sich ändern, solange die Version 0.x ist.
Wartung erfolgt nach bestem Aufwand durch eine betreuende Person. Feedback und Beiträge bitte über GitHub.
Vollständige Dokumentation einschließlich Speicherformat und Pruning- Bedingungen: https://github.com/Flamefork/duckdb-jsono#readme
Hinzugefügte Funktionen
| 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 |
Überladene Funktionen
| 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 |
Hinzugefügte Typen
Diese Erweiterung fügt keine Typen hinzu.
Hinzugefügte Einstellungen
Diese Erweiterung fügt keine Einstellungen hinzu.