Dans un article précédent, j'ai exploré la performance de la capture de données modifiées sans code versus l'échange de source vue dans un test de vitesse lorsque l'objectif est de maintenir une couche d'entités hébergée - et j'ai déclaré un match nul ! Maintenant, j'ai un nouveau concurrent issu du monde des solutions codées - utilisant un notebook hébergé ArcGIS Online pour calculer et appliquer la transaction delta pour une couche d'entités hébergée où les données sources changent quotidiennement.<\/P>
Mes données thématiques sont les mêmes que dans l'article précédent, points d'adresse de rue pour la ville de Los Angeles, mises à jour quotidiennement.<\/P>
Points d'adresse de Los Angeles<\/span><\/span><\/P>Il y a un peu plus d'un million de points dans le jeu de données, avec quelques centaines de modifications quotidiennes : insertions, mises à jour et suppressions. J'étais impatient d'écrire sur un cas d'utilisation upsert (la combinaison d'insertion et de mise à jour dans une seule transaction) depuis un certain temps, car il est désormais pris en charge avec l'outil de géotraitement Append dans Pro et donc dans ArcPy dans le runtime avancé du notebook.<\/P>Je prends un peu d'avance, alors posons d'abord le contexte. Pour envisager un flux ETL codé, vous devez être sûr que vos données sont bien gérées, avec peu ou pas besoin de corrections ou d'applications de transformations pendant le processus ETL - car bien que vous puissiez visualiser les données dans un notebook, il est très difficile d'effectuer une inspection approfondie des données et de découvrir des problèmes de données. Si vous ne pouvez pas faire confiance à vos données, vous devriez utiliser ArcGIS Data Pipelines ou ArcGIS Data Interoperability.<\/STRONG><\/P>Dans ce cas, la ville fournit des données bien organisées, donc je suis heureux de recommander un processus codé lift-and-shift.<\/P>Revenons aux outils utilisés. Dans le téléchargement du blog, vous trouverez une boîte à outils ArcGIS Pro 3.6 avec un modèle. Le modèle crée une classe d'entités dans une géodatabase fichier nommée Addresses en utilisant des données CSV qu'il télécharge depuis le site Open Data de la ville. La classe d'entités a un schéma optimisé (voir le contrôle de mappage des champs dans l'outil Export Features) et aussi un champ clé primaire House_Number_ID avec une contrainte not-null et un index, exigences pour utiliser les transactions upsert.<\/P>
Modèle créant les données Addresses<\/span><\/span><\/P>J'ai publié mon service d'entités depuis ArcGIS Pro après avoir appliqué une certaine symbologie et comportement popup et je me suis assuré que House_Number_ID a un index unique dans le service d'entités. Passons maintenant au notebook qui maintient le service.<\/P>Je vous laisse parcourir le code du notebook (dans le téléchargement du blog), mais les étapes du traitement sont :<\/P>Utiliser DuckDB pour lire le fichier CSV source depuis l'URL du site open data téléchargé<\/LI>Pendant la lecture, appliquer un schéma et créer la géométrie dans une relation mémoire (table)<\/LI>Avec ArcPy, créer une classe d'entités mémoire à partir des données dans la relation DuckDB<\/LI>Fusionner les données d'adresse existantes et entrantes dans une autre classe d'entités mémoireCelle-ci contient à la fois les anciens et nouveaux enregistrements<\/LI><\/UL><\/LI>Utiliser Find Identical pour trouver des séquences identiques dans les données fusionnées sur la géométrie et tous les champsLes données sont en Web Mercator donc une tolérance de 1m permet les différences de précision des coordonnées<\/LI><\/UL><\/LI>Lancer Frequency pour aider à trouver les lignes uniquesLes entités modifiées n'ont pas de correspondances identiques<\/LI><\/UL><\/LI>Utiliser les mathématiques des ensembles pour déterminer les enregistrements upsert et delete<\/LI>Lancer les fonctions Append et Delete Rows avec les enregistrements corrects<\/LI><\/UL>Si vous inspectez les messages des cellules du notebook, vous verrez que tout le travail a pris 9 minutes 30 secondes (des données assez volumineuses sont lues dans le notebook et traitées par géotraitement) mais les écritures effectives ont été petites et n'ont pris que quelques secondes - plutôt bien selon moi.<\/P>Après avoir configuré un traitement programmé les matins en semaine, j'ai maintenant un produit d'information maintenu en continu !<\/STRONG><\/P>N'hésitez pas à commenter ce post avec vos observations ou questions.<\/P>