Continuous Integration / Continuous Delivery (CI/CD) ist eine Softwareentwicklungsmethodik. Ich übernehme den Begriff und wende ihn auf Daten an, nicht auf Software, speziell auf Daten, die sich ständig im Laufe der Zeit ändern und , die Sie kontinuierlich in Ihre Aufzeichnungssysteme integrieren müssen!
Als jemand, der gerne direkt ins kalte Wasser springt, ist mein Beispiel die Verarbeitung eines Feeds von Positionen öffentlicher Verkehrsmittel (über eine REST API zugänglich), der sich alle 30 Sekunden aktualisiert, und das Weiterleiten der Daten an einen gehosteten Feature-Service in einem ArcGIS Enterprise-Portal und auch in eine räumlich aktivierte Tabelle in Snowflake. Ich werde ein Web-Tool für die Verarbeitung verwenden, da hohe Verfügbarkeit offensichtlich ratsam ist.
Hier sind Bus-, Zug- und Fährpositionen von vor wenigen Momenten (früher Samstag Ortszeit) in Auckland, NZ.
Bus-, Zug- & Fährpositionen in Auckland
Ich arbeite wahrscheinlich am äußersten Ende der Frequenz für kontinuierliche Bulk-Datenintegration; ich erwarte, dass die überwiegende Mehrheit der Integrationen in Intervallen von Stunden oder Tagen durchgeführt wird, aber zumindest wissen Sie, was erreicht werden kann.
Bleiben Sie dran, während ich mit meinem Integrationsszenario etwas Spaß habe 😉.
Sagen wir, ich arbeite bei Fako (ein fiktiver Name), die das First-Mile/Last-Mile-Problem des E-Commerce gelöst haben. Fako hat erkannt, dass Pendlernetzwerke sehr effizient sind, um Menschen und Einzelhandelswaren zusammenzubringen – kaufen oder verkaufen –, wenn die Fahrgäste die Käufer und Verkäufer sind. In Zusammenarbeit mit Verkehrsbetreibern entfernen wir einige Sitzreihen in jedem Fahrzeug auf beiden Seiten des Gangs und ersetzen sie durch Raster von intelligenten Aufbewahrungsschränken, zu denen Internetbestellungen von unseren Lagerarbeitern an unseren Lagern geliefert werden können, die sich an Verkehrsknotenpunkten befinden. Käufer bestellen von jeder Website zur Lieferung an einem Tag und einer Route; Verkäufer verkaufen auf unserer Website und wir transferieren Artikel zu Routen überall im Netzwerk. Wir sind Spediteure. Die mobile App von Fako ermöglicht es Kunden, ihr Telefon zu verwenden, um den Schrank zu öffnen, in dem sich ihr Artikel während ihrer Fahrt befindet. Einige Schränke sind gekühlt; wir haben unsere eigene Mahlzeiten-Kit-Linie. Ein sehr beliebtes Feature unserer mobilen App erlaubt es Fahrgästen, bei Auktionen für aufgegebene Gegenstände mitzubieten. Fako zahlt Verkehrsbetreibern den Gegenwert eines Fahrpreises pro Artikel und steigert so deren effektive Fahrgastzahl erheblich. Fako muss keine Lieferfahrzeugflotte kaufen und die Verkehrsbetreiber erzielen höhere Einnahmen. Das Geschäft boomt!
Fakos Backend-Systeme laufen auf Snowflake. Um alles zum Laufen zu bringen, muss Fako den Netzwerkstatus kontinuierlich als räumlich aktivierte Snowflake-Objekte pflegen. Mal sehen wie!
Zuerst der langweilige Weg, für den ich mich zufällig disqualifiziert habe, indem ich eine Frequenz gewählt habe, die Windows geplante Aufgaben nicht unterstützen: Man würde einen Spatial ETL Workspace-Source-fmw auf meinen Data Interoperability Server kopieren und eine geplante Aufgabe basierend auf der Befehlszeile konfigurieren, die in einer Protokolldatei aus einem manuellen Lauf als arcgis-Benutzer dokumentiert ist:
Befehlszeile zum Ausführen dieses Workspaces:
"C:\Program Files\ESRI\Data Interoperability\Data Interoperability AO11\fme.exe" C:\Users\arcgis\Desktop\ContinuousIntegration\VehiclePositions2Snowflake.fmw
Sie sollten diese Option sorgfältig für Ihre Situation prüfen; sie ist robust und einfach.
Jetzt der nicht-langeweilige Weg. Wie gesagt, ich habe mich in diese Richtung gedrängt, indem ich mit Daten gearbeitet habe, die sich häufig in großen Mengen aktualisieren. Ich erstelle ein Web-Tool, das die Integration durchführt und sich dann nach einer Wartezeit bis zur Aktualisierung der Quelldaten selbst aufruft.
Wow, ein Web-Tool, das sich selbst aufruft – kein webhook und keine Planung? Es ist verrückt einfach (vielleicht auch einfach verrückt).
Ich habe zwei Spatial ETL Tools erstellt: eines echt und eines Dummy, das nichts tut, aber denselben Namen und dieselben Parameter hat (in diesem Fall keine).

Ich habe einen Verlaufsdatensatz der Dummy-Version von VehiclePositions2Snowflake als Web-Tool geteilt und die submitJob-URL aufgezeichnet. Es ist wichtig, dass das Web-Tool asynchron ist, damit es beim Aufruf den Workspace nicht blockiert und auf eine Antwort wartet:
https://dev99999.esri.com/server/rest/services/VehiclePositions2Snowflake/GPServer/VehiclePositions2Snowflake/submitJob
Dann bearbeiten Sie das echte ETL Tool im letzten HTTP-Schritt so, dass es die submitJob-URL aufruft. Führen Sie das Tool aus und überschreiben Sie aus seinem Verlaufseintrag heraus das Dummy-Web-Tool .
Ich lasse Sie das Tool selbst erkunden; im Grunde holt der obere Stream die Fahrzeugdaten ab und synchronisiert sie mit dem Portal und Snowflake; der untere Stream wartet darauf sowie 30 Sekunden ab und führt dann den HTTP-Aufruf aus.
Das selbstintegrierende ETL Tool
Anschließend führen Sie das Web-Tool einmal manuell aus – und schon läuft es endlos weiter. Ich sitze hier und aktualisiere meine Pro-Karte (kein Cache auf der Feature-Service-Ebene) und sehe die Transportflotte sich bewegen.
In Snowflake aktualisieren sich meine Daten ebenfalls:
Snowflake-Konsole
Zurück zu einigen langweiligen Details: Vergessen Sie nicht, dass beim Veröffentlichen von Spatial ETL Tools als Web-Tools Data Interoperability auf jedem Server installiert und lizenziert sein muss, der Tools hostet. Wenn Sie Web-Verbindungs- oder Datenbankanmeldeinformationen wie hier verwenden, gehen Sie zum Dialog Tools>FME Options und exportieren Sie die erforderlichen Anmeldeinformationen (Rechtsklick für das Menü) als XML-Dateien; legen Sie diese auf Ihrem Server ab und importieren Sie sie in die Workbench-Umgebung als arcgis-Dienstbesitzer. Wenn Sie einen Workspace manuell auf dem Server ausführen, müssen Sie möglicherweise auch die Python-Umgebung ändern. Schließlich sollte das Tool, das Sie auf Ihrem Server veröffentlichen, eine eingebettete Quelle haben – auch wenn im Blog-Download eine FMW-Datei enthalten ist.
Das hat Spaß gemacht!