En un blog anterior exploré el rendimiento de la captura de cambios sin código frente al intercambio de vista de origen en una prueba de velocidad cuando el objetivo es mantener una capa de entidades alojada, ¡y declaré un empate! Ahora tengo un nuevo participante del mundo de soluciones codificadas: usar un cuaderno alojado en ArcGIS Online para calcular y aplicar la transacción delta para una capa de entidades alojada donde los datos fuente cambian diariamente.<\/P>
Mis datos temáticos son los mismos que en el blog anterior, puntos de direcciones callejeras para la ciudad de Los Ángeles, actualizados diariamente.<\/P>
Puntos de Direcciones de Los Ángeles<\/span><\/span><\/P>Hay un poco más de un millón de puntos en el conjunto de datos, con unos pocos cientos de cambios diarios: inserciones, actualizaciones y eliminaciones. He estado interesado en escribir sobre un caso de uso de upsert (la combinación de inserción y actualización en una sola transacción) durante un tiempo, ya que ahora es compatible con la herramienta de geoprocesamiento Append en Pro y por lo tanto en ArcPy en el entorno avanzado del cuaderno.<\/P>Me estoy adelantando, así que primero pongamos el escenario. Para considerar un flujo ETL codificado necesitas estar seguro de que tus datos están bien gestionados, con poca o ninguna necesidad de hacer correcciones o aplicar transformaciones durante el proceso ETL - porque aunque puedes ver datos en un cuaderno, es muy difícil hacer una inspección profunda y descubrir problemas en los datos. Si no puedes confiar en tus datos entonces deberías usar ArcGIS Data Pipelines o ArcGIS Data Interoperability.<\/STRONG><\/P>En este caso la ciudad está entregando datos bien curados, así que estoy feliz de recomendar un proceso codificado lift-and-shift.<\/P>Volviendo a las herramientas usadas. En la descarga del blog encontrarás una caja de herramientas de ArcGIS Pro 3.6 con un modelo. El modelo crea una clase de entidad en geodatabase archivo llamada Addresses usando datos CSV que descarga del sitio Open Data de la ciudad. La clase de entidad tiene un esquema ajustado (ver el control del mapa de campos en la herramienta Export Features) y también un campo clave primaria House_Number_ID con restricción not-null y un índice, requisitos para usar transacciones upsert.<\/P>
Modelo Creando Datos de Direcciones<\/span><\/span><\/P>Publiqué mi servicio de entidades desde ArcGIS Pro después de aplicar algo de simbología y comportamiento emergente y me aseguré que House_Number_ID tenga un índice único en el servicio de entidades. Ahora para el cuaderno que mantiene el servicio.<\/P>Te dejaré revisar el código del cuaderno (en la descarga del blog), pero los pasos del procesamiento son:<\/P>Usar DuckDB para leer el archivo CSV fuente desde la URL del sitio open data descargado<\/LI>Mientras se lee, aplicar un esquema y crear geometría en una relación (tabla) en memoria<\/LI>Usando ArcPy, crear una clase de entidad en memoria a partir de los datos en la relación DuckDB<\/LI>Merge los datos existentes y entrantes de direcciones en otra clase de entidad en memoriaEsto contiene registros antiguos y nuevos<\/LI><\/UL><\/LI>Usar Find Identical para encontrar secuencias idénticas en los datos fusionados a través de geometría y todos los campos<\/STRONG>Los datos están en Web Mercator por lo que una tolerancia de 1m permite diferencias en precisión coordenada<\/LI><\/UL><\/LI>Correr Frequency para apoyar encontrar filas únicasLas entidades editadas no tienen coincidencias idénticas<\/LI><\/UL><\/LI>Usar matemáticas de conjuntos para determinar los registros upsert y delete<\/LI>Correr las funciones Append y Delete Rows con los registros correctos<\/LI><\/UL>Si inspeccionas los mensajes en las celdas del cuaderno verás que todo el trabajo tomó 9 minutos y medio (se leen muchos datos grandes dentro del cuaderno y se geoprocesan) pero las escrituras reales fueron pequeñas y tomaron solo unos segundos - bastante bueno según mi opinión.<\/P>Después de configurar el procesamiento programado las mañanas entre semana ahora tengo un producto informativo mantenido continuamente!<\/STRONG><\/P>Por favor comenta en esta publicación con cualquier observación o pregunta.<\/P>