Ceci n'est peut-être pas votre problème exact - charger 100 millions de fonctionnalités dans un service d'entités hébergé dans ArcGIS Online - mais le sujet ici est le chargement de big data dans un service d'entités hébergé dans Online, 100 millions est l'échelle dont je parle.<\/P>
Voici à quoi ressemblent 100 000 000 de fonctionnalités à la densité avec laquelle je travaille.<\/P>
Une étendue d'environ un pâté de maisons :<\/P>
Calque non visible<\/span><\/span><\/P>Puis en activant la visibilité du calque :<\/P>
Calque visible<\/span><\/span><\/P>Les données sont si volumineuses que Pro 2.9 n'essaiera pas de les afficher à des échelles inférieures à 1:500.<\/P>Voici le contexte. Une des équipes Esri avec laquelle je travaille s'occupe occasionnellement de big data destiné à un service d'entités hébergé dans Online. Le web étant ce qu'il est, de très grandes transactions de partage peuvent échouer en raison de problèmes réseau ou autres, auquel cas vous devez récupérer la situation là où elle a échoué<\/EM> ou relancer tout le processus de partage<\/EM>. Ils voulaient un processus qui fonctionne de manière fiable et avec un mécanisme de récupération en cas d'échec. Ils se dirigeaient vers la voie Python, ce qui est bien pour les Pythonistas mais je suis le gars sans code au bureau (disons un codeur en rémission qui a parfois des rechutes). ArcGIS Data Interoperability à la rescousse !<\/STRONG><\/P>Mes données test sont un fichier CSV de 143 751 910<\/STRONG> lignes.<\/P>
Obtenir le compte<\/span><\/span><\/P> <\/P>J'ai pris 100 millions de lignes du haut juste comme un nombre rond agréable. Les données ont des valeurs lat/lon donc l'aspect ETL est une simple activation spatiale pour créer des entités ponctuelles. Maintenant, comment les envoyer à une couche d'entités ponctuelles ?<\/P>Une étape préliminaire a été de prendre un échantillon des données vers une géodatabase fichier et créer un service d'entités à partir de celui-ci, cela instancie simplement la couche cible. Ensuite, le problème en aval est double :<\/P>Charger les données aussi efficacement que possible<\/LI>Utiliser une méthodologie qui supporte la récupération en cas d'échec<\/LI><\/UL>L'équipe Online a suggéré qu'un « point idéal » pour charger ces données à cette échelle serait d'utiliser le point de terminaison Append pour le service d'entités avec des lots de 500K enregistrements dans deux processus concurrents, et l'exécuter « après les heures » aux États-Unis. Pas de problème, voici mes espaces de travail :<\/P>
LoadTaxis<\/span><\/span><\/P>LoadTaxis<\/STRONG> crée des géodatabases fichiers compressées par ensembles de 500K enregistrements<\/STRONG>, puis transmet le chemin des données à LoadTaxisWorker<\/STRONG> dans un maximum de deux processus qui s'exécutent asynchroniquement. J'ai constaté que le temps nécessaire pour préparer les données correspondait bien au temps qu'Online met pour les ingérer, un peu moins de 2 minutes par lot pendant les heures creuses. En regardant défiler le fichier journal, il y a eu quelques cas où LoadTaxis<\/STRONG> a fait une pause en attendant qu'un créneau de processus soit disponible, mais généralement Online était prêt pour le lot suivant, donc les choses fonctionnaient aussi vite que mon ETL pouvait tourner.<\/P> <\/P>
LoadTaxisWorker<\/span><\/span><\/P>LoadTaxisWorker<\/STRONG> télécharge chaque géodatabase fichier compressée vers Online puis appelle le point de terminaison Append du service, déclenchant un chargement depuis le nouvel élément géodatabase fichier. Cela lance un travail dans Online. Un transformateur personnalisé en boucle vérifie l'achèvement du travail toutes les 5 secondes (avec un nombre maximum de vérifications fixé à
Je préfère en fait exécuter l'outil LoadTaxisWorker en mode édition (c'est-à-dire dans Workbench) afin de pouvoir faire des choses comme activer les Emailers pour suivre l'action en détail. Il y a aussi ce problème à surveiller que je vais mettre dans une balise spoiler :
SpoilerAvertissement : Append appelé par LoadTaxisWorker peut prendre beaucoup plus de temps que prévu (des heures et non des minutes) s'il est exécuté à un moment chargé pour Online - Append est une ressource partagée et peut être mis en file d'attente. Dans ce cas, l'Emailer vous indiquera que 210 secondes (ou votre délai d'attente préféré) se sont écoulées sans que Append ne se termine ; il finira quand même par se terminer mais les opérations de nettoyage ne seront pas déclenchées. J'ai vécu cela et j'ai activé l'Emailer qui envoie l'URL du travail pour pouvoir le surveiller manuellement.
Quoi qu'il en soit, après avoir exécuté manuellement vos travaux échoués, vous aurez 100 millions de features dans votre service !
Youpi, mes 100 millions de features sont chargés !
Ça a été difficile ?
Les outils ETL sont dans le téléchargement postérieur. J'ai utilisé ArcGIS Pro 2.9 & Data Interoperability extension.