Dateningenieure und Datenanalysten müssen bei ihrer täglichen Arbeit die Dateneingabeprozesse verbessern. Über die üblichen Unit-Tests hinaus kann es interessant sein, zwei Datensätze (d. h. Tabellen, Ansichten, Abfragen usw.) für verschiedene Zwecke wie Auswirkungsanalysen oder Nicht-Regressionstests einfach und schnell zu vergleichen. Auch die Identifizierung von Diskrepanzen zwischen zwei Standpunkten einer Snapshot-Tabelle ist für Ad-hoc-Analysen oder die Fehlersuche sehr nützlich.
Vor diesem Hintergrund und für SQL-Praktiker ist ein vorgefertigtes und wiederverwendbares Skript sinnvoll, daher der Zweck dieses Artikels.
Gebrauchsfertige SQL-Vorlage erklärt
Lassen Sie uns mit der erwarteten Anfrage zum Kern der Sache vordringen:
Lassen Sie uns das erklären:
Hinweis: Voraussetzung für die Verwendung der obigen Abfrage ist natürlich, dass zwei Datensätze mit vergleichbaren Feldern vorhanden sind.
Illustriertes Beispiel
Genug der Theorie, jetzt zur Praxis! Angenommen, ein Supermarkt möchte alle Produkte, die für eine Werbeaktion in Frage kommen, in einer einzigen Tabelle nach den Bedingungen der Woche abrufen.
Als erste Aussage betrachten wir die folgenden Produkte auf Lager:
Gemäß den Beförderungsbedingungen in Woche 1:
der Datensatz_1 ist:
In Woche 2 ändern sich die Beförderungsbedingungen zu:
Die data pipeline evolution erzeugt den Datensatz_2:
Aber... sind wir wirklich von den Ergebnissen überzeugt? Typische Fragen sind:
Hinweis: Auch wenn es aufgrund eines trivialen Beispiels für einen kleinen Datensatz einfach erscheint, die obigen Fragen intuitiv zu beantworten, haben wir es in realen Anwendungsfällen in der Regel mit vielen Zeilen und Spalten aus komplexen Abfragen zu tun (Transformationen, Joins, Aggregate, Windows-Funktionen, ...), so dass diese Abfrage ihre volle Bedeutung erlangt
Versuchen wir nun, die 3 Fragen zu beantworten, indem wir die Ergebnisse der Vergleichsabfrage interpretieren:
Beobachtungen:
Endlich sieht alles gut aus:
Tipps und Tricks
Auch wenn Sie bei CTE Ihre Ingestion-SQL-Abfrage vor/nach der Entwicklung einfügen können, könnte es eine gute Idee sein, die Ergebnisse in temporären Tabellen zu speichern, um den Vergleich zu vereinfachen, die Abfrageleistung zu verbessern und von der Zwischenspeicherung zu profitieren, wenn Sie die Abfrage mehrmals ausführen.
In der Praxis können Abweichungen zwischen zwei Datensätzen unschön sein. Dann kann die Sortierung der Ergebnisse nach Schlüssel (der Granularität der Datensätze) und Flagge die Interpretation und den Vergleich gleichwertiger Zeilen aus beiden Datensätzen enorm erleichtern.
Um die Untersuchungen zu erleichtern und den Ursprung der Lücke zu ermitteln, können die verdächtigen gemeinsamen Felder des Datensatzes aus dem Vergleich entfernt (d. h. in CTE kommentiert) werden: Wenn es kein Ergebnis gibt, bedeutet dies, dass alle verglichenen Felder gleich sind. Sie können sich dann beim nächsten Vergleich nur auf die verbleibenden verdächtigen Felder konzentrieren und Schritt für Schritt vorgehen.
Hinweis: Eine gleichwertige Analyse hätte mit der Strategie LEFT JOIN durchgeführt werden können, wäre aber viel schwieriger zu pflegen (Verwaltung von NULLs und Feldvergleichen) und weniger effizient gewesen, da Mengenoperatoren leistungsfähiger sind als Joins.
Zusammenfassung
Diese Abfragevorlage erleichtert es den Entwicklern daher, Änderungen an komplexen data Pipelines schnell zu validieren. Sie ist eine nützliche Ergänzung zu traditionelleren Unit-Tests und kann sogar ganz allgemein für den Vergleich zweier Datensätze mit ähnlichen Strukturen herangezogen werden. Und nicht zuletzt ist die Logik dieser Abfrage sogar leicht auswendig zu lernen!
Danke fürs Lesen, ich hoffe, es war klar und ich würde mich über Ihr Feedback freuen :)