A la demande, interroger l'ensemble des fichiers GeoParquet pour extraire les données intéressantes- Cette requête utilise une clause SQL simple mais puissante, continuez votre lecture...<\/LI><\/UL>
Voici une requête exemple où j'extrais dans une classe mémoire toutes les demandes 311 jusqu'à présent pour 2026 dans un polygone - cela a pris 4 secondes. Il y a environ 8500 entités.<\/P>
Requête San Francisco<\/span><\/P>L'outil de requête est un outil scripté, sa sauce secrète est la clause QUALIFY. Les fichiers GeoParquet issus des données quotidiennes auront des doublons dus au cycle de vie du cas (ouvert un jour, modifié un autre jour, fermé plus tard) alors nous voulons uniquement la ligne la plus récente par valeur service_request_id parmi tous les fichiers GeoParquet - la clause QUALIFY lors de la requête sur les données parquet fait cela pour nous.<\/P> conn.sql(f"""create or replace temp view sf311_view as select
service_request_id,requested_datetime,closed_date,updated_datetime,
status_description,status_notes,agency_responsible,service_name,
service_subtype,service_details,address,street,supervisor_district,
neighborhoods_sffind_boundaries,police_district,source,media_url,
bos_2012,data_as_of,data_loaded_at,ST_AsWKB(GEOM) as wkb
from read_parquet('{pqPath}',filename=false)
where {where}
and ST_Intersects(ST_GeomFromText('{wkt}'), GEOM)
qualify row_number() over (partition by service_request_id order by updated_datetime desc) = 1;""")<\/code><\/pre> <\/P>Ainsi maintenant nous avons une simple façon de livrer des données en évolution rapide de manière cloud native avec des requêtes rapides.<\/P>Que faire si nous avons des données assez volumineuses mais aucun moyen d'interroger les changements ?<\/P> <\/P>Insertions, mises à jour et suppressions continues d'éditions<\/H3> <\/P>Les données soumises à une édition versionnée par branche intensive sont un travail de grande valeur pour GIS, et bien que vous puissiez partager l'état des données en donnant accès à ses services de fonctionnalités sous-jacents, ajouter une charge de travail cartographique publique au serveur ne sera pas apprécié par l'administrateur. Il s'avère que vous pouvez partager l'état des données, avec prise en charge du voyage dans le temps, en utilisant une approche cloud-native<\/STRONG>. Ce qui permet cela est le modèle de données insert-only<\/STRONG> du versionnage par branche<\/STRONG> - l'état d'une fonctionnalité à n'importe quel moment est déterminé par GDB_FROM_DATE en combinaison avec OBJECTID - la ligne avec la dernière GDB_FROM_DATE pour chaque valeur unique d'OBJECTID est l'état actuel d'une fonctionnalité, et si vous interrogez pour des valeurs GDB_FROM_DATE antérieures vous obtenez un voyage dans le temps. La seule astuce est de créer des fichiers GeoParquet qui représentent les moments d'édition, mais ensuite la clause QUALIFY vient encore à la rescousse pour fournir les données que vous voulez.<\/P>Voici deux vues des données cadastrales sur la même étendue et utilisant les mêmes fichiers source GeoParquet<\/STRONG>.<\/P>
Moments actuels et antérieurs<\/span><\/span><\/P>La vue de gauche est le moment le plus récent, la vue de droite est à un moment antérieur, vous pouvez voir qu'une grande subdivision parcellaire a eu lieu. La source des données conserve l'historique complet des données, les éditions entraînent l'ajout de nouveaux fichiers GeoParquet dans un dossier ou un magasin d'objets cloud. Ici j'ai un fichier GeoParquet de base de 1,46 Go pour l'état original des données avec quelques petits fichiers GeoParquet contenant des éditions sur deux semaines.<\/STRONG><\/P>
Fichiers GeoParquet contenant l'historique complet des données<\/span><\/span><\/P>Voici un manifeste du fichier de téléchargement du blog CloudNativeDataDistribution.zip<\/STRONG>:<\/P>ImportCurrentDivisionAreas.ipynb<\/STRONG> notebookTélécharge les entités Overture Division Area vers votre géodatabase projet domicile<\/LI>Crée des noms multilingues pour les entités dans une table liée<\/LI>Crée ou actualise un localisateur en utilisant les entités Division Area comme données de référence<\/LI><\/UL><\/LI>GetBaselineSF311<\/STRONG> outil ETL spatialExtrait l'ensemble complet du jeu de données 311 pour San Francisco vers GeoParquet<\/LI>Nécessite ArcGIS Data Interoperability<\/LI>Nécessite un compte et un jeton d'application<\/LI><\/UL><\/LI>GetUpdatesSF311<\/STRONG> outil ETL spatialExtrait les données de cas 311 plus récentes que celles dans un fichier GeoParquet existant<\/LI>Crée un nouveau fichier GeoParquet<\/LI>Nécessite ArcGIS Data Interoperability<\/LI>Nécessite un compte et un jeton d'application<\/LI><\/UL><\/LI>Generate311Points <\/STRONG>outil scriptDémontre l'utilisation des fichiers GeoParquet pour créer une classe d'entités en mémoire<\/LI><\/UL><\/LI>ExtractCurrentParcels.ipynb<\/STRONG> notebook
Démontre l'extraction de l'état le plus récent des données des fichiers GeoParquet dans un modèle de données versionné par branche<\/LI><\/UL><\/LI>ExtractEarlierParcels.ipynb<\/STRONG> notebookDémontre l'extraction d'un état antérieur des données des fichiers GeoParquet dans un modèle de données versionné par branche<\/LI><\/UL><\/LI><\/UL>Non inclus, mais disponible sur demande, les outils utilisés pour construire les fichiers GeoParquet pour les données cadastrales. Rappelez-vous, là où mes outils d'exemple utilisent le stockage local pour GeoParquet, en production vous utiliseriez un magasin d'objets cloud, comme AWS S3.<\/P>Maintenant, bien que j'espère vous voir à la User Conference 2026 à San Diego, si vous avez besoin de plus d'encouragement voici un aperçu exclusif d'une démo intégrant les données thématiques Overture Building dans une scène. Voyez si vous pouvez trouver quelques outils script easter egg dans le téléchargement du blog 😉<\/span>.<\/P>
Bâtiments Overture<\/span><\/span><\/P> <\/P>