duck_diff
Vergleichen Sie zwei Relationen (Tabellen, Abfragen) anhand eines Primärschlüssels und erhalten Sie pro Schlüssel den Status (identical/different/left_only/right_only), eine JSON-Zusammenfassung geänderter Spalten sowie die linken und rechten Werte je Spalte.
Maintainer: avaitla
Installation und Laden
INSTALL duck_diff FROM community;LOAD duck_diff;Beispiel
LOAD duck_diff;
-- Create two sample snapshotsCREATE TABLE users_v1 AS SELECT * FROM (VALUES) t(id, name, email, credits);
CREATE TABLE users_v2 AS SELECT * FROM (VALUES) t(id, name, email, credits);
-- Diff them off the primary keySELECT id, diff_status, diff_data, credits_left, credits_rightFROM table_diff('FROM users_v1', 'FROM users_v2', pk := 'id')ORDER BY id;
-- Or get counts and percentages per statusSELECT * FROM table_diff_summary('FROM users_v1', 'FROM users_v2', pk := 'id');Über duck_diff
duck_diff findet die Unterschiede zwischen zwei Tabellen — die bei Bedarf
auf völlig unterschiedlichen Systemen liegen können. Typische Anwendungen:
- Prüfen, ob eine Kopie getreu ist: CDC-Pipelines, Read Replicas, Warehouse- ELT, Migrationen. Ergebnisse pro Schlüssel zeigen veraltete Zeilen, verpasste Deletes und fehlende Inserts, die Zeilenzählungen verbergen.
- Überprüfen, ob eine SQL-Umschreibung (Refactoring, Dialektübersetzung, Performance- Arbeit) dieselben Zeilen wie das Original zurückgibt.
- Einem Coding-Agenten wie Claude ermöglichen, eigene Änderungen zu verifizieren: die Prüfung
ist deterministisch (
n_total = n_identical), sodass ein Agent umschreiben, den Diff ausführen und wiederholen kann, bis er besteht — mit Claude Codes/goalsetzen Sie den wahr zurückgebenden Diff als Abschlussbedingung, und der Agent arbeitet über Turns hinweg weiter, bis das nachweislich gilt.
Jeder Schlüssel erhält einen Status (identical / different / left_only /
right_only), ein JSON-diff_data der geänderten Spalten sowie
Spalten <c>_left / <c>_right / <c>_diff_status. Zusammengesetzte Schlüssel werden
unterstützt; upcast_types, numeric_tolerance, timestamp_precision,
null_equals_empty und columns / ignore / context steuern den
Vergleich über Engines hinweg.
Links: website & cross-database recipe builder · function reference · runnable demos (MySQL, Postgres, ClickHouse, BigQuery, Snowflake, Iceberg, DuckLake, S3 Tables) · AI-assisted migration guide
Funktionen:
| Function | Returns | Purpose |
|---|---|---|
table_diff(left, right, pk := ...) |
table | one row per key: key column(s), diff_status, diff_data, expanded columns |
table_diff_summary(left, right, pk := ...) |
one row | counts (and percentages) per status |
schema_diff(left, right) |
table | per-column name/type comparison — reads no rows |
Hinzugefügte Funktionen
| function_name | function_type | description | comment | examples |
|---|---|---|---|---|
| schema_diff | table | NULL | NULL | |
| table_diff | table | NULL | NULL | |
| table_diff_summary | 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
Diese Erweiterung fügt keine Einstellungen hinzu.