Il est toujours satisfaisant de partager de nouvelles méthodes puissantes pour résoudre des problèmes, surtout lorsque la solution a été « cachée à la vue de tous » pendant un certain temps. Cette fois, je montre comment la combinaison de ArcGIS Enterprise branch versioning et du cloud native data sharing offre non seulement un accès rapide aux données, aux personnes sans accès au portail, mais aussi la capacité de demander aux données consultées de revenir dans le temps quand elles étaient plus jeunes. Comme ces parcelles, voir une parcelle auparavant indivise et maintenant ses trois subdivisions.<\/P>
Subdivision de parcelle<\/span><\/span>Subdivision de parcelle<\/SPAN><\/SPAN><\/SPAN><\/P>Imaginez un jeu de données avec des millions d'entités et sous une maintenance quotidienne intensive, comme le branch versioning est conçu pour gérer, vos clients peuvent accéder à tout ou partie de la version par défaut à n'importe quel moment donné. Pour toujours. Sans charge supplémentaire sur votre portail Enterprise.<\/P>Alors, comment en suis-je arrivé là ? J'ai simplement remarqué que le modèle transactionnel insert-only du branch versioning convient parfaitement à la création incrémentale de fichiers GeoParquet dans un stockage cloud qui préservent conjointement l'état des données dans le temps et peuvent être interrogés spatialement et temporellement pour fournir localement des données à la demande pour votre zone et période d'intérêt.<\/P>Cependant, c'est une requête très sophistiquée ! La bonne nouvelle est que vous n'avez pas à la comprendre vous-même, le téléchargement du blog contient un notebook avec des exemples pour mon sujet de parcelles, il suffit d'y insérer les vôtres.<\/P>Je n'ai pas eu à inventer cette approche de requête, Esri publie des matériaux d'atelier sur ce sujet. Par exemple, si vous allez vers la minute 18 dans cette présentation, vous verrez à quoi ressemble une telle requête.<\/P>Spoiler<\/a>ajoutez la classe archive à la carte, ils sont disponibles:<\/P>
Classe archive ajoutée à la carte<\/span><\/span>Classe archive ajoutée à la carte<\/SPAN><\/SPAN><\/SPAN><\/P>Quelques points à noter dans la carte des champs : ObjectID est rétrogradé en entier long ordinaire (les valeurs ne sont plus uniques) et divers champs nommés GDB_* sont ajoutés. Ils permettent de visualiser les données à un instant donné, ce qui est le fonctionnement du branch versioning - l'état le plus récent d'une entité prévaut, ce qui peut être un état supprimé, mais l'historique des données n'est pas perdu (à moins que vous ne le supprimiez), ce qui rend possible le voyage dans le temps.<\/P>La classe archive est également utile pour découvrir quels moments d'édition sont présents dans vos données.<\/P>Avec la classe archive fournissant une visibilité sur tous les champs, le workflow de partage et de maintenance était possible. Il se déroule ainsi :<\/P>Créer un fichier parquet initial avec toutes les lignes de la classe archive où GDB_BRANCH_ID = 0<\/LI>Selon un calendrier adapté, créer des fichiers delta parquet pour les nouveaux états de ligne de branche par défautCes fichiers ont une GDB_FROM_DATE postérieure au maximum présent dans tous les fichiers parquet existants<\/LI>Ils ont aussi GDB_BRANCH_ID = 0<\/LI><\/UL><\/LI>Maintenir tous les fichiers parquet dans votre magasin d'objets compatible S3 préféré sous un chemin glob<\/LI>Fournir à vos clients de données un notebook ou un outil script qu'ils peuvent utiliser pour extraire les donnéesLe notebook fourni nécessite DuckDB version 1.0.0 dans l'environnement Python<\/LI><\/UL><\/LI><\/UL>Maintenant, je présente cela comme une distribution cloud native data, mais au moment où j'écris je configure encore mon compte AWS donc le notebook joint utilise un chemin système local ; je mettrai cela à jour dès que j'aurai une URL S3 publique disponible. En attendant, vous pouvez télécharger des données d'exemple pour tester ici, ici, ici et ici. Ce sont la copie initiale en masse et quelques fichiers delta incrémentaux, avec quelques jours d'éditions chacun. Modifiez la variable pqPath du notebook selon votre environnement jusqu'à ce que j'aie mis en place le chemin S3.<\/P>Spoiler<\/A>Les données que j'utilise ne sont pas vraiment maintenues dans une géodatabase branch versioned, j'ai créé des données d'exemple ; veuillez consulter les permissions des données dans les détails des éléments aux liens ci-dessus.<\/DIV>
Les données que j'utilise ne sont pas vraiment maintenues dans une géodatabase branch versioned, j'ai créé des données d'exemple ; veuillez consulter les permissions des données dans les détails des éléments aux liens ci-dessus.<\/DIV><\/DIV>
Vous verrez dans le notebook que je fournis un modèle pour les requêtes d'étendue et de voyage dans le temps. Je trouve que je peux extraire les 2,7 millions de parcelles dans mes données en un peu plus de 3 minutes depuis un disque local. L'accès depuis S3 devrait être un peu plus lent, nous verrons quand ce sera configuré. Essayez le notebook par vous-même.<\/P>
Vous pourriez avoir quelques questions sur le notebook, je vais essayer d'en anticiper quelques-unes :<\/P>
- DuckDB 1.0.0 est utilisé car il est dans le canal Esri Conda et les versions ultérieures gèrent différemment la géométrie<\/LI>
- La colonne bbox dans les fichiers parquet est de type JSON mais interrogée comme varchar car DuckDB ne semblait pas reconnaître les données comme JSON<\/LI>
- J'ai essayé d'utiliser la pseudocolonne rowid intégrée dans DuckDB mais j'ai eu des erreurs, donc je l'ai remplacée<\/LI>
- J'ai essayé d'écrire la classe d'entités en sortie en passant par un dataframe spatialement activé mais j'ai eu des erreurs<\/LI>
- Dans le téléchargement du blog, le projet atbx contient un outil script que j'ai utilisé pour trouver les largeurs souhaitées des champs texte en sortie<\/LI><\/UL>
Maintenant je vais être un peu égoïste. Pour créer mes données d'exemple et mes fichiers parquet j'ai construit quelques outils ETL (Pro 3.4), que j'aurais pu scripturer. Ces outils ne sont pas inclus dans le téléchargement du blog. Si vous êtes intéressé par eux, veuillez me contacter et je pourrai partager. Cela aidera l'équipe ici si nous savons combien de personnes s'intéressent à ce paradigme de partage de données, alors aidez-nous à vous aider.<\/P>