Bei ihrer täglichen Arbeit müssen Data Engineers und Data-Analysten die data-Ingestionsprozesse verbessern. Über die üblichen Unit-Tests hinaus kann es interessant sein, zwei data-Sets (d.h. Tabellen, Views, 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-Anwender 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 kommen:
Lassen Sie es uns erklären:
Hinweis: Voraussetzung für die Verwendung der obigen Abfrage ist natürlich, dass Sie zwei data-Sets mit vergleichbaren Feldern haben.
Illustriertes Beispiel
Genug der Theorie, jetzt zur Praxis! Angenommen, ein Supermarkt möchte alle Produkte abrufen für eine Beförderung in einer einzigen Tabelle je nach Woche in Frage kommen Beförderungsbedingungen.
Als erste Aussage betrachten wir die folgenden Produkte auf Lager:
Gemäß den Beförderungsbedingungen in Woche 1:
das dataset_1 ist:
In Woche 2 ändern sich die Beförderungsbedingungen zu:
Die Pipeline-Evolution data erzeugt das dataset_2:
Aber... sind wir wirklich von den Ergebnissen überzeugt? Typische Fragen sind:
Hinweis: Auch wenn es aufgrund eines trivialen Beispiels mit einem kleinen dataset einfach erscheint, die obigen Fragen intuitiv zu beantworten, haben wir es in realen Anwendungsfällen in der Regel mit einer Vielzahl von Zeilen und Spalten aus komplexen Abfragen zu tun (Transformationen, Joins, Aggregate, Windows-Funktionen, ...), die dieser Abfrage ihre volle Bedeutung verleihen
Lassen Sie uns versuchen, die 3 Fragen zu beantworten, indem wir die Ergebnisse der Vergleichsabfrage interpretieren:
Beobachtungen:
Endlich sieht alles gut aus:
Tipps und Tricks
Auch wenn Sie in CTE Ihre Ingestion-SQL-Abfrage vor/nach der Evolution kopieren können, könnte es eine gute Idee sein, die speichern Sie die Ergebnisse in temporären Tabellen um den Vergleich zu vereinfachen, die Leistung der Abfrage zu verbessern und von der Zwischenspeicherung zu profitieren, wenn Sie die Abfrage mehrmals ausführen.
In der Praxis können Divergenzen zwischen zwei data-Sets unschön sein. Dann, Ergebnisse sortieren nach Schlüssel (der Granularität der datasets) und Flagge kann bei der Interpretation und dem Vergleich gleichwertiger Zeilen aus beiden datasets enorm helfen.
Um die Untersuchungen zu erleichtern und den Ursprung der Lücke zu identifizieren, hat die Verdächtig datasets gemeinsame Felder können aus dem Vergleich entfernt (d.h. in CTE kommentiert) werden: Wenn es kein Ergebnis gibt, bedeutet das, 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 auch 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 Entwicklern daher, Änderungen an komplexen data-Pipelines schnell zu validieren. Sie ist eine nützliche Ergänzung zu herkömmlichen Unit-Tests und kann sogar allgemeiner betrachtet werden, wenn zwei data-Sets mit ähnlichen Strukturen verglichen 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 :)

BLOG












