Ausgangslage
Der Kunde hat einen manuellen Prozess zum Auswerten von Verkaufsdaten aus verschiedenen Regionen. Die Daten sind in Excel-Tabellen gesammelt und der Prozess der Auswertung ist durch die zunehmende Datenmenge langwieriger und Fehleranfällig geworden. Die Daten müssen manuell formatiert und auf Fehler kontrolliert werden.
Der Kunde benutzt Palantir Foundry, eine Softwareplattform von Palantir Technologies, die es ermöglicht Daten aus verschiedenen Quellen in ein zentrales System zu laden. Der Kunde wünschte, dass die Lösung mit Palantir Foundry umgesetzt wird.
Siehe Dokumentation von Palantir: https://www.palantir.com/docs/foundry/data-integration/overview/
Aufgabenstellung
Mein Ziel war es, eine effiziente und automatisierte Datenpipeline in Palantir Foundry zu erstellen. Diese sollte folgende Aufgaben erfüllen:
- Daten-Upload: Excel-Tabellen werden in Palantir Foundry hochgeladen.
- Automatische Validierung: Die Pipeline startet nach dem Upload und prüft die Datentypen sowie Formatierungen.
- Bei Fehlern: Automatische Benachrichtigung der Verantwortlichen mit Fehlermeldung.
- Bei fehlerfreien Daten: Fortsetzung der Datenverarbeitung.
- Datenprüfung:
- Überprüfung, ob das Format den regionalen Vorgaben entspricht.
- Validierung, ob bestimmte Spalten die vom Kunden definierten Werte enthalten.
- Datenkonsolidierung: Bereinigung und Zusammenführung der validierten Datensätze in einen konsolidierten Datensatz.
- Fehlerbehandlung: Abbruch und Benachrichtigung bei Format- oder Werteabweichungen.
- Erfolgsbenachrichtigung: Versand einer Erfolgsmeldung bei erfolgreichem Durchlauf der Pipeline.
Entwicklung der Lösung
Da ich bereits während längerer Zeit bei diesem Kunden in einem ähnlichen Projekt mit Palantir Foundry gearbeitet habe, hatte ich schon erste Gedanken wie ich dieses Projekt umsetzen konnte.
Datenaufnahme in Palantir
Vor Beginn der Pipeline-Entwicklung klärte ich mit dem Kunden die benötigten Spalten und Datentypen ab und erhielt dazu verschiedene Excel-Tabellen aus den Regionen sowie eine Liste der relevanten Spalten, Datentypen und erlaubten Werte für einzelne Spalten.
In Palantir Foundry lud ich eine dieser Tabellen hoch, um die automatisch zugeordneten Datentypen zu überprüfen. Danach richtete ich gemeinsam mit dem Kunden verschiedene Content Checks ein, um sicherzustellen, dass die erforderlichen Spalten existieren und nur konfigurierte Werte enthalten.
Siehe «Checks Reference» in der Palantir Foundry Dokumentation: https://www.palantir.com/docs/foundry/data-health/checks-reference/
Aufbau der Pipeline
Die Pipeline wurde als «Batch Pipeline» implementiert, jede Änderung in einem der Input-Datasets z.B. durch Hochladen einer neuen Excel-Tabelle startet die Ausführung der dazugehörigen Python- und/oder SQL-Skripts. So stehen jederzeit die aktuellen Daten zur Verfügung.
Die Pipeline fängt mit dem «Input-Dataset» an, dies ist das Dataset, wo die Excel-Tabelle hochgeladen wird. Nach dem Hochladen wird automatisch ein Python-Skript gestartet, dieses enthält verschiedene «Data Expectation Checks», die ich zusammen mit dem Kunden definiert und mit Python implementiert habe. Die Checks sind so konfiguriert, dass ein fehlgeschlagener Check automatisch die weitere Verarbeitung abbricht und eine Benachrichtigung an den Verantwortlichen gesendet wird.
Das Ergebnis der erfolgreichen Ausführung des Python-Skripts ist eine neue Tabelle in Palantir «Output-Dataset» genannt. Dies ist auch der Auslöser des nächsten SQL-Skripts in der Pipeline. Dieses formatiert die Daten nach Vorgaben des Kunden und fügt neue Spalten hinzu, deren Werte aus den vorhandenen Spalten berechnet werden. Diese Werte werden später für die Auswertung benötigt und wurden im bestehenden Prozess manuell berechnet.
Als nächstes wird ein SQL-Skript für die Transformation der Daten gestartet. Dieses Skript erstellt eine neue Tabelle in welcher Daten nach Vorgaben des Kunden formatiert sind.
Die oben genannten Skripte und Datasets sind für jede Region separat vorhanden, dies wurde bewusst gemacht. Der Grund dafür liegt in der Prüfung der Daten und der Verarbeitung. Wenn mehrere Verarbeitungen parallel in Bearbeitung sind und eine wegen einem Fehler in den Daten abgebrochen ist, wird eine Fehlermeldung für das betroffene Dataset generiert und die Verarbeitung des einzelnen abgebrochen, die anderen Skripte sind nicht betroffen. Andererseits wird von Palantir empfohlen, manuell hochgeladene Daten am Anfang einer Pipeline zu prüfen, damit Fehler früh genug erkannt und die weitere Verarbeitung gestoppt wird.
Zum Kombinieren der bereinigten und angereicherten Datasets habe ich ein SQL-Skript implementiert, das automatisch startet, wenn eines der vorherigen Datasets erfolgreich aktualisiert wurde. Dieses abschliessende SQL-Skript konsolidiert die zuvor generierten Datasets in ein einziges, auswertbares Dataset.
Referenzen in der Palantir Foundry Dokumentation: https://www.palantir.com/docs/foundry/building-pipelines/create-batch-pipeline-cr/
https://www.palantir.com/docs/foundry/maintaining-pipelines/overview
https://www.palantir.com/docs/foundry/transforms-python/data-expectations-getting-started
Testen der Pipeline
Die Pipeline wurde während der gesamten Entwicklung laufend getestet. Der Kunde hat mir dazu Tabellen mit Testdaten gegeben.
Ich habe zuerst Kopien der einzelnen Tabellen gemacht und darin verschiedene Fehler eingebaut. Ein Teil der Fehler sollte durch die Skripte in der Pipeline korrigiert werden, z.B. Kürzel von Regionen in Grossbuchstaben und andere sollten die Verarbeitung der Pipeline mit einer Fehlermeldung abbrechen. Bei einer Tabelle habe ich bewusst eine ganze Spalte entfernt.
Die fehlerhaften Tabellen wurden dann nacheinander in die Pipeline hochgeladen, dabei wurde jedes Mal kontrolliert, ob die automatische Korrektur von Fehlern in den Skripten funktionierte, ob die Checks korrekt auslösen und den weiteren durchlauf der Daten abbrechen. Dabei wurde auch der Versand der Benachrichtigungen bei Auslösung geprüft.
Als nächstes habe ich die Meldung eines erfolgreichen Durchlaufs der Pipeline getestet. Dazu habe ich die originale Testdatei vom Kunden in die Pipeline hochgeladen und den Status der Pipeline überwacht. Die Tabelle wurde erfolgreich verarbeitet, eine Erfolgsmeldung wurde generiert und von mir empfangen.
Als letztes habe ich einen Test der Pipeline zusammen mit dem Kunden gemacht. Dieser Test diente auch zur Kontrolle ob der Kunde die Bedienung der Pipeline versteht und die Benachrichtigungen über Erfolg/Fehlschlag erhält, versteht und die richtigen Korrekturen vornimmt.
Schulung
Während der Testphase habe ich eine Dokumentation für die Pipeline erstellt. Diese enthält eine Anleitung wie ein Benutzer Daten hochlädt und dadurch die Pipeline startet. Die Bedeutung verschiedener Fehlermeldungen und wie man sie behebt. Sowie Kontaktangaben für die Verantwortlichen der Pipeline beim Kunden.
Zum Abschluss der Schulung wurde eine Vorführung für die zukünftigen Benutzern und Verantwortlichen beim Kunden gemacht. Bei dieser wurde gezeigt, wie Daten hochgeladen werden. Welche Benachrichtigung bei einem korrekten durchlauf erscheint, welche bei Fehler(n) in der Pipeline, wie man selbst Fehler behebt und die Verarbeitung neu startet und Änderungen gegenüber dem bestehenden Prozess erläutert.
Produktiver Einsatz
Nach der Schulung der Benutzer wurde die Pipeline für den Produktiven Einsatz vorbereitet. Alle Skripte in der Pipeline wurden refrakturiert und mit Kommentaren versehen, welche den Aufbau des Codes erklären. Die Konfiguration der Benachrichtigungen wurde mit den Adressen der Benutzer aktualisiert, welche die Pipeline benutzen, Adressen, die zum Testen benutzt wurden, gelöscht wurden.
Nach diesen Änderungen wurden die Benutzer benachrichtigt, dass ein letzter Test vor dem Produktiven Einsatz gemacht wird, sie deshalb Benachrichtigungen erhalten und dass Sie am gleichen Tag eine weitere Nachricht mit dem definitiven Entscheid über den Einsatz der Pipeline. Der Test wurde mit Daten aus der produktiven Umgebung gemacht, die Pipeline funktionierte trotz den letzten Änderungen einwandfrei.
Nach erfolgreichem Abschluss des Tests wurde die Pipeline vom Kunden für den produktiven Einsatz freigegeben. Die Benutzer erhielten von mir eine Nachricht mit dem Entscheid und der Aufforderung erste Daten hochzuladen.
Während der ersten Wochen im Produktiven Einsatz stand ich für den Kunden als technischer Supporter zur Verfügung.
Fazit
Ich habe bei diesem Kunden zwar schon vorher mit Palantir Foundry gearbeitet, aber noch nie eine gesamte Pipeline von Grund auf entwickelt. Rückblickend war diese Aufgabe weniger Komplex als gedacht, weil ich auf meine bisherigen Erfahrungen mit Palantir aufbauen konnte.
Der Kunde war mit der implementierten Pipeline sehr zufrieden. erfolgreichem Abschluss der Testphase ist die Pipeline im produktiven Einsatz und verarbeitet Kundendaten. Die Benachrichtigungen zum erfolgreichen durchlauf oder Abbruch bei fehlerhaften Daten funktionieren einwandfrei.
Aufgrund der erfolgreichen Umsetzung wurde ich vom Kunden beauftragt eine weitere Pipeline mit ähnlichem Aufbau zu implementieren.
Dieses Projekt wurde im Jahr 2022 implementiert, Palantir Foundry wurde stand heute (2024) stark verbessert und bietet neue Tools zum einfacheren Bauen einer Datenpipeline an.
Autor: Matthias Engels