Menü

Massenvalidierung: Arbeitsablauf für große Nummernlisten

Eine Massenvalidierung ist eine andere Aufgabe als die Einzelprüfung: erst die ganze Datei bereinigen, dann jede Zeile ihrem Schema zuordnen und einen kategorisierten Bericht schreiben, der die Zeile benennt.

Veröffentlicht am

  • Validierung
  • Massendaten
  • Testdaten

Eine einzelne Nummer zu prüfen ist eine Interaktion. Fünfzigtausend zu prüfen ist ein Stapelprozess mit eigener Wirtschaftlichkeit: Die Kosten je Zeile müssen klein bleiben, die Fehlerarten müssen lesbar sein, ohne dass ein Mensch jede Zeile ansieht, und das Ergebnis muss am nächsten Morgen gut genug sein, dass jemand darauf reagieren kann.

Die Versuchung besteht darin, die interaktive Routine in einer Schleife über die Datei laufen zu lassen und die Fehlschläge auszugeben. Für ein paar hundert Zeilen funktioniert das, danach bricht es zusammen, weil es undifferenziertes Rauschen erzeugt und genau die zwei Tatsachen verbirgt, die eine prüfende Person braucht: welche Zeilen falsch sind und in welcher Weise.

Wie unterscheidet sich die Massenvalidierung von der Prüfung eines einzelnen Wertes?

Alle Unterschiede betreffen das, was nach der Arithmetik geschieht. Eine interaktive Prüfung liefert ein Urteil an eine Person, die den Wert auf dem Bildschirm sieht. Eine Stapelprüfung liefert ein Urteil für jede Zeile einer Datei, die noch niemand angesehen hat, und der Bericht ist das Einzige, was überhaupt gelesen wird.

Die Größenordnung ändert zudem die Form der Arbeit. Eine große Datei auf einmal in den Arbeitsspeicher zu lesen scheitert bei den größten Eingaben, weshalb die Kette strömen muss. Gemeinsame Vorbereitungen für jede Zeile neu zu berechnen verschwendet den größten Teil der Laufzeit, weshalb Schema-Zuordnungen einmal aufgelöst werden sollten. Und dieselbe Zeile kann zweimal verarbeitet werden, wenn ein Lauf neu startet, weshalb der Vorgang gefahrlos wiederholbar sein muss.

Schließlich ist das Publikum ein anderes. Ein Stapelbericht wird von jemandem gelesen, der entscheidet, was zu beheben ist, und muss deshalb sortiert, kategorisiert und in der Ortsangabe präzise sein. Die Einzelmeldung, dass eine Prüfziffer nicht passt, ist technisch korrekt und in einer Datei mit vierzigtausend Zeilen praktisch wertlos.

Jeder in diesem Beitrag genannte Wert wird beschrieben und nicht zitiert. Ein Massenlauf über echte Daten sollte solche Werte maskieren, bevor irgendetwas in einen Bericht geschrieben wird, und die Beispiele hier sind lediglich veranschaulichende Formen.

Erst bereinigen, dann prüfen: die Verarbeitungskette

Die Reihenfolge der Schritte ist das, was den Rest der Arbeit möglich macht, und es ist dieselbe Reihenfolge wie bei der Prüfung eines einzelnen Feldes, nur Zeile für Zeile angewandt.

  1. Lesen Sie die Datei als Text und bewahren Sie die ursprünglichen Werte genau so auf, wie sie geliefert wurden.
  2. Normalisieren Sie jeden Wert — Trennzeichen entfernen, Leerraum zusammenfassen, Schreibweise vereinheitlichen — und behalten Sie beide Formen.
  3. Lösen Sie das Schema oder die Schemata für jede Zeile auf, abhängig von der Spalte, aus der der Wert stammt, und bei gemischten Spalten zusätzlich abhängig vom Wert selbst.
  4. Führen Sie die passende Prüfung aus oder halten Sie fest, dass keine Regel greift.
  5. Ordnen Sie jede Zeile einer Kategorie zu und schreiben Sie anschließend den Bericht.

Die ganze Datei vor der Prüfung zu normalisieren bedeutet, dass ein einziger Codepfad sowohl die Prüfung als auch die Duplikatanalyse trägt. Es bedeutet außerdem, dass der Bericht beide Formen nebeneinander zeigen kann, was für eine prüfende Person der schnellste Weg ist, ein systematisches Problem zu erkennen, etwa eine ganze Spalte, die mit einem zusätzlichen Trennzeichen eintrifft.

Führen Sie die Schema-Auflösung einmal je unterscheidbarem Muster aus und nicht einmal je Zeile. Eine Datei mit nur einer Art von Kennung braucht eine einzige Auflösung, und selbst eine gemischte Datei enthält meist nur eine Handvoll verschiedener Formen, sodass das Zwischenspeichern der Auflösung aus Kosten je Zeile Kosten je Datei macht.

Welche Kategorien sollte ein Ergebnisdatensatz enthalten?

Die Kategorien sind das, was aus einer Liste von Fehlschlägen eine Diagnose macht, und sie sollten zu den Urteilen passen, die der Prüfer ohnehin erzeugt, statt ein neues Vokabular zu erfinden.

Kategorie Bedeutung Typische Ursache
Geprüft und gültig Das veröffentlichte Verfahren wurde angewandt und das abschließende Zeichen stimmt zu Echte Werte oder für Tests erzeugte Werte
Geprüft und ungültig Das Verfahren wurde angewandt und das abschließende Zeichen stimmt nicht zu Ein Tippfehler im Rumpf oder im abschließenden Zeichen
Nur Format Die Form wurde bestätigt; es ist kein Verfahren veröffentlicht Ein Schema aus der mittleren Abdeckungsstufe
Unbekanntes Schema Nichts, was das Werkzeug umsetzt, passt zu dieser Form Eine gemischte Spalte, eine verirrte Kopfzeile oder ein Wert aus einem anderen System
Duplikat Der normalisierte Wert erscheint anderswo in der Datei Derselbe Datensatz wurde zweimal exportiert

Duplikate verdienen eine eigene Kategorie, obwohl sie keine Prüfungsfehler sind. Bei einem Import sind sie oft der folgenschwerste Befund überhaupt, und sie unter fehlerhaften Zeilen zu begraben garantiert, dass sie übersehen werden.

Halten Sie Nur Format und Unbekanntes Schema ebenfalls getrennt. Sie führen zu verschiedenen Maßnahmen: Ein reines Formatergebnis bedeutet, dass die Daten so gut sind, wie sie überhaupt beurteilt werden können, während ein unbekanntes Schema jemanden erfordert, der herausfindet, was die Spalte tatsächlich enthält. Die Nummern ohne Prüfziffer sind genau der Fall, in dem die mittlere Stufe dauerhaft das Höchste bleibt, was erreichbar ist.

Duplikate, leere Zellen und sehr große Dateien

Drei gewöhnliche Situationen verursachen den größten Teil der Schwierigkeiten in echten Dateien.

Duplikate müssen am normalisierten Wert erkannt werden, denn zwei unterschiedlich gesetzte Abschriften derselben Nummer sind dieselbe Nummer. Melden Sie das erste Vorkommen als Ort und führen Sie die weiteren als Verweise auf, damit eine prüfende Person erkennen kann, ob die Wiederholung zufällig oder strukturell ist.

Leere Zellen sind keine Fehlschläge. Eine Lücke dort, wo ein Wert erforderlich war, ist ein Vollständigkeitsproblem, und sie in die Kategorie ungültig einzufalten bläht die Fehlerzahl auf und schickt jemanden auf die Suche nach einem Prüfziffernfehler, den es nicht gibt. Zählen Sie Leerstellen getrennt und lassen Sie die verbrauchende Stelle entscheiden, ob sie annehmbar sind.

Große Dateien brauchen Streaming und ein stabiles Speicherprofil. Lesen Sie zeilenweise, halten Sie nur den Index für die Dublettenprüfung und die Zähler, und schreiben Sie Berichtszeilen in Blöcken, damit die Ausgabe nicht zum Engpass wird. Wächst der Index selbst über den Arbeitsspeicher hinaus, weichen Sie auf einen sortierten externen Zusammenlauf oder einen temporären Speicher aus, statt zu versuchen, alles gleichzeitig zu halten.

Was macht einen Bericht handlungsfähig?

Wer morgens um neun den Bericht liest, braucht vier Dinge aus der Ausgabe: die Zeilennummer, den Wert so, wie er ankam, die Kategorie und einen kurzen Grund. Alles andere ist Ausschmückung.

Zeilennummern müssen sich auf etwas beziehen, das die prüfende Person finden kann. Sagen Sie ausdrücklich, ob es Dateizeilen oder Datenzeilen sind, denn eine Kopfzeile verschiebt sie um eins, und wer sich auf die falsche Konvention verlässt, bearbeitet anschließend den falschen Datensatz. Führen Sie den ursprünglichen Wert genau so auf, wie er geliefert wurde, da dies die Zeichenkette ist, nach der gesucht wird, und führen Sie zusätzlich die normalisierte Form an, wenn sie sich unterscheidet.

Auch die Sortierung zählt. Eine Gruppierung nach Kategorie bringt jeden Fall eines Problems zusammen, wodurch eine prüfende Person ein Muster erkennt, statt vierzigtausend Zeilen zu lesen. Innerhalb einer Kategorie sortieren Sie nach Zeile, damit die Datei von oben nach unten bearbeitet werden kann.

Machen Sie schließlich die Zusammenfassung ehrlich. Eine Zahl gültiger Zeilen muss benennen, welches Urteil sie erzeugt hat, denn eine Datei, in der die meisten Zeilen nur formatgeprüft sind, ist ausschließlich in ihrer Form bestätigt, und eine Zusammenfassung, die sie als gültig ausweist, wird aus dem Zusammenhang gerissen weitergegeben werden. Was die einzelnen Urteile bedeuten, hält die Grundlage der Nummernprüfung fest.

Für Entwickler: Blöcke, Nebenläufigkeit und Idempotenz

Die Stapelschicht ist der Ort, an dem aus einem funktionierenden Skript ein verlässlicher Lauf wird.

  • Verarbeiten Sie in Blöcken, die nach dem Speicherbedarf bemessen sind und nicht nach runden Zahlen, und machen Sie die Blockgröße konfigurierbar.
  • Parallelisieren Sie die Arithmetik und nicht die Ausgabe. Jeder Arbeitsschritt sollte Ergebnisse zurückgeben, und ein einzelner Schreiber sollte den Bericht zusammensetzen, damit die Reihenfolge bestimmt bleibt.
  • Machen Sie den Lauf idempotent: Dieselbe Eingabedatei muss dieselbe Ausgabe erzeugen, einschließlich der Reihenfolge, damit zwei Läufe verglichen werden können.
  • Halten Sie die Version des Regelsatzes und die Prüfsumme der Eingabe im Kopf des Berichts fest, damit ein Ergebnis Monate später reproduziert werden kann.
  • Schreiben Sie niemals vollständige Werte in Protokolle. Berichte sind Bestimmungsorte für Werte, Protokolle nicht, und die Maskierungsregel sollte greifen, bevor etwas den Prozess verlässt.

Maskierung ist nicht optional, wenn die Datei echte Werte enthält. Ein Massenlauf liest alles auf einmal, weshalb ein einziger ungeschwärzter Bericht ein weit größeres Risiko darstellt als eine einzelne abgelehnte Formulareingabe. Entscheiden Sie vor dem ersten Lauf, welche Spalten wiedergegeben werden dürfen und welche gekürzt werden müssen. Die Verbindung zwischen einem Massenlauf und dem Dienst, der ihn speist, ist als Nächstes lesenswert: Die Prüfung an der API-Grenze behandelt, was der empfangende Dienst tun sollte, wenn die Datei eintrifft, und die Übersicht der Prüfziffernverfahren erklärt die Arithmetik, die je Zeile ausgeführt wird.

Nächste Schritte

Lassen Sie Ihren derzeitigen Ablauf über eine Datei laufen, die absichtlich je einen Fall jeder Kategorie enthält — eine gültige Zeile, eine ungültige Zeile, eine nur formatgeprüfte Zeile, eine unbekannte Form und ein Duplikat — und prüfen Sie, ob der Bericht alle fünf erkennbar macht, ohne die Quelldatei zu öffnen. Das Werkzeug zur Nummernprüfung ist ein bequemer Ort, um die Formulierung jedes Urteils zu bestätigen, bevor Sie sie im Berichtsformat festschreiben.

Weiterlesen

Artikel zu Prüfer für Kreditkarten- und SSN-Nummern