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 typisiertes STRUCT, 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.