In einem vorherigen Blog habe ich die Leistung von no-code change data capture versus view source swap in einem Geschwindigkeitstest untersucht, wenn das Ziel darin besteht, eine gehostete Feature-Layer zu pflegen – und es als Unentschieden erklärt! Nun habe ich einen neuen Teilnehmer aus der Welt der codierten Lösungen – die Verwendung eines ArcGIS Online gehosteten Notebooks, um die Delta-Transaktion zu berechnen und anzuwenden für eine gehostete Feature-Layer, bei der sich die Quelldaten täglich ändern.<\/P>
Meine thematischen Daten sind dieselben wie im vorherigen Blog, Straßenadressenpunkte für die Stadt Los Angeles, die täglich aktualisiert werden.<\/P>
Los Angeles Address Points<\/span><\/span><\/P>Im Datensatz befinden sich etwas über eine Million Punkte, mit einigen hundert Änderungen täglich: Einfügungen, Aktualisierungen und Löschungen. Ich wollte schon lange über einen upsert-Anwendungsfall schreiben (die Kombination aus Einfügen und Aktualisieren in einer einzigen Transaktion), da dies jetzt mit dem Append-Geoverarbeitungswerkzeug in Pro und somit auch in ArcPy im Notebook Advanced Runtime unterstützt wird.<\/P>Ich komme der Sache voraus, also lassen Sie uns zuerst den Rahmen setzen. Um einen codierten ETL-Workflow in Betracht zu ziehen, müssen Sie sicher sein, dass Ihre Daten gut verwaltet sind, mit wenig oder keinem Bedarf, während des ETL-Prozesses Korrekturen vorzunehmen oder Transformationen anzuwenden – denn obwohl Sie Daten in einem Notebook anzeigen können, ist es sehr schwierig, eine tiefgehende Dateninspektion durchzuführen und Datenprobleme zu entdecken. Wenn Sie Ihren Daten nicht vertrauen können, sollten Sie ArcGIS Data Pipelines oder ArcGIS Data Interoperability verwenden.<\/STRONG><\/P>In diesem Fall liefert die Stadt gut kuratierte Daten, daher empfehle ich gerne einen codierten Lift-and-Shift-Prozess.<\/P>Zurück zu den verwendeten Werkzeugen. Im Blog-Download finden Sie eine ArcGIS Pro 3.6 Toolbox mit einem Modell. Das Modell erstellt eine File-Geodatabase-Feature-Class namens Addresses unter Verwendung von CSV-Daten, die es von der Open Data-Seite der Stadt herunterlädt. Die Feature-Class hat ein abgestimmtes Schema (siehe das Feldzuordnungskontrollfeld im Export Features-Werkzeug) und auch ein Primärschlüsselfeld House_Number_ID mit einer Nicht-Null-Beschränkung und einem Index, Anforderungen für die Verwendung von upsert-Transaktionen.<\/P>
Modell zur Erstellung von Adressdaten<\/span><\/span><\/P>Ich habe meinen Feature-Service aus ArcGIS Pro veröffentlicht, nachdem ich etwas Symbologie und Popup-Verhalten angewendet hatte und sichergestellt habe, dass House_Number_ID im Feature-Service einen eindeutigen Index besitzt. Nun zum Notebook, das den Service pflegt.<\/P>Ich lasse Sie den Notebook-Code (im Blog-Download) durchgehen, aber die Verarbeitungsschritte sind:<\/P>Verwenden Sie DuckDB, um die Quell-CSV-Datei von der Open Data-Site Download-URL zu lesen<\/LI>Während des Lesens ein Schema erzwingen und Geometrie in einer Speicherrelation (Tabelle) erstellen<\/LI>Mit ArcPy eine Speicher-Feature-Class aus den Daten in der DuckDB-Relation erstellen<\/LI>Merge vorhandene und eingehende Adressdaten in eine andere Speicher-Feature-ClassDiese enthält sowohl alte als auch neue Datensätze<\/LI><\/UL><\/LI>Verwenden Sie Find Identical, um identische Sequenzen in den zusammengeführten Daten über Geometrie und alle Felder hinweg zu findenDie Daten liegen in Web Mercator vor, daher erlaubt eine Toleranz von 1 m Unterschiede in der Koordinatenpräzision<\/LI><\/UL><\/LI>Führen Sie Frequency aus, um Zeilen zu identifizieren, die einzigartig sindEditierte Features haben keine identischen Übereinstimmungen<\/LI><\/UL><\/LI>Verwenden Sie Mengenmathematik zur Bestimmung der upsert- und Löschdatensätze<\/LI>Führen Sie die Funktionen Append und Delete Rows mit den korrekten Datensätzen aus<\/LI><\/UL>Wenn Sie die Nachrichten der Notebook-Zellen überprüfen, sehen Sie, dass der gesamte Vorgang 9 1\/2 Minuten dauerte (ziemlich große Daten werden ins Notebook geladen und geoverarbeitet), aber die tatsächlichen Schreibvorgänge waren klein und dauerten nur wenige Sekunden – ziemlich gut meiner Meinung nach.<\/P>Nach dem Einrichten der geplanten Verarbeitung an Wochentagmorgenden habe ich jetzt ein kontinuierlich gepflegtes Informationsprodukt!<\/STRONG><\/P>Bitte kommentieren Sie diesen Beitrag mit Ihren Beobachtungen oder Fragen.<\/P>