anofox_scenario

Git-ähnliches Branching für analytische Datenbanken. Hängen Sie isolierte What-if-Szenarien als Kataloge an, bearbeiten Sie sie mit gewöhnlichem SQL auf Copy-on-Write-Delta-Speicher, verzweigen Sie, vergleichen Sie und führen Sie sie wieder zusammen.

Maintainer: jrosskopf

Installation und Laden

INSTALL anofox_scenario FROM community;
LOAD anofox_scenario;

Beispiel

-- History as recorded
CREATE TABLE sales_plan (region VARCHAR PRIMARY KEY, units INTEGER);
INSERT INTO sales_plan VALUES ('EMEA', 1000), ('AMER', 2000), ('APAC', 500);
-- Branch a what-if world: two statements, then it's just SQL
CALL scenario_create('aggressive_q4', 'push APAC hard');
ATTACH 'aggressive_q4' AS q4 (TYPE scenario);
UPDATE q4.sales_plan SET units = 1500 WHERE region = 'APAC';
DELETE FROM q4.sales_plan WHERE region = 'EMEA';
-- Both worlds coexist; the base is never written
SELECT 'base' AS world, * FROM sales_plan
UNION ALL
SELECT 'scenario', * FROM q4.sales_plan ORDER BY world, region;
-- Audit the changes, then promote them
SELECT * FROM scenario_diff('aggressive_q4', 'sales_plan');
SELECT * FROM scenario_merge('aggressive_q4');

Über anofox_scenario

anofox_scenario bringt Git-ähnliches Branching in DuckDB-Datenbanken. Ein Szenario ist ein angehängter Katalog (ATTACH 'name' AS s (TYPE scenario)) über Ihren vorhandenen Tabellen: Lesezugriffe mischen die Basis mit dem Copy-on-Write-Delta des Szenarios zur Laufzeit, und INSERT / UPDATE / DELETE / MERGE INTO / ON CONFLICT (jeweils mit RETURNING) landen im Delta — die Basistabellen werden nicht verändert.

Drei Isolationsstufen: ein Live-Overlay (Standard), mode := 'materialized' als Point-in-Time-Kopien sowie DuckLake-Basen, die über AT (TIMESTAMP) auf den Erstellungszeitpunkt festgenagelt sind, für Zero-Copy-Snapshot-Isolation. Szenarien verzweigen voneinander (from_scenario :=) und erben Änderungen, deklarierte Zeilenidentitäten und Snapshot-Pins.

Eine Streaming-Diff-Engine (scenario_diff, scenario_diff_summary) prüft jede Welt gegen ihren Ursprung oder eine andere Welt, und scenario_merge(name, on_conflict := 'abort'|'ours'|'theirs') übernimmt ein Szenario atomar in seine Basis — mit echten 3-Wege-Drift-Konflikten, wenn ein Erstellungssnapshot existiert. Views werden innerhalb von Szenarien neu gebunden, alle Basisschemas werden gespiegelt, und Tabellen ohne Primärschlüssel funktionieren entweder über mit key_columns := deklarierte Identität oder über Bag-Semantik mit Multiplizitätsverfolgung.

Szenario-Welten lassen sich mit tabellennamengesteuerten Erweiterungen kombinieren: zum Beispiel prognostiziert ts_forecast_by('s.demand', ...) (anofox_forecast) eine What-if- Welt direkt, ohne Kopien.

Die Erweiterung erfasst anonyme Nutzungstelemetrie (nur ein Hüllen-Ereignis extension_loaded; niemals Tabellennamen, Schlüssel oder SQL). Deaktivieren mit SET anofox_scenario_telemetry_enabled = false oder DATAZOO_DISABLE_TELEMETRY=1; siehe TELEMETRY.md im Repository.

Hinzugefügte Funktionen

function_name function_type description comment examples
scenario_create table NULL NULL
scenario_diff table NULL NULL
scenario_diff_summary table NULL NULL
scenario_drop table NULL NULL
scenario_freeze table NULL NULL
scenario_list table NULL NULL
scenario_merge table NULL NULL
scenario_merge_preview table NULL NULL
scenario_migrate table NULL NULL
scenario_refresh table NULL NULL
scenario_unfreeze table NULL NULL

Überladene Funktionen

Diese Erweiterung fügt keine Funktionsüberladungen hinzu.

Hinzugefügte Typen

Diese Erweiterung fügt keine Typen hinzu.

Hinzugefügte Einstellungen

name description input_type scope aliases
anofox_scenario_telemetry_enabled Enable or disable anonymous usage telemetry for anofox_scenario BOOLEAN GLOBAL []
datazoo_banner Show the DataZoo feedback banner when an extension is loaded in an interactive terminal (at most once a day per extension). BOOLEAN GLOBAL []