La transacción destacada de hoy es upsert, asistida eficazmente por delete. Si estás manteniendo una geodatabase o una capa de entidades alojada (ArcGIS Online o ArcGIS Enterprise), a menos que estés haciendo algo drástico como un truncate, puedes empaquetar todas tus ediciones ETL en estos dos métodos usando ArcGIS Data Interoperability (pero también consulta las opciones principales a continuación). Inserts y updates viajan juntos como upserts, mientras que deletes hablan por sí mismos.<\/P>
Para datos de caso de uso, estoy usando los City of Los Angeles Open Data Address Points<\/A>. Si tienes interés en echar un vistazo al material en bruto, este enlace<\/A> descargará un archivo CSV (161MB+, más de 1M filas).<\/P>Los Angeles address points<\/span><\/span><\/P>El mapa muestra el resultado del ETL en una capa de entidades alojada, que es mi producto de información objetivo. También podría ser cualquier tipo de geodatabase. Los datos en bruto son típicos de muchas fuentes ETL, con estas propiedades:<\/P> <\/P>Los datos no son accesibles inmediatamente para ArcGIS<\/LI>El esquema de datos es un poco críptico<\/LI>Los datos cambian frecuentemente, pero solo una pequeña fracción de un conjunto grandeLas ediciones pueden ser inserts, updates o deletes<\/STRONG><\/LI>No existen campos metadata para rastrear ediciones<\/LI><\/UL><\/LI>Los datos tienen un campo clave primaria persistente<\/LI><\/OL>#1 y #2 arriba son desafíos básicos de ETL que se resuelven fácilmente. #3 sugiere que upserts y deletes son métodos candidatos, mientras que #4 es lo que hace posible los upserts. Usar una clave de coincidencia es la salsa secreta para esta publicación, pero como en cualquier buen programa de cocina la receta viene después de ver el resultado!<\/P>Upsert & Delete ETL Tool<\/span><\/span><\/P>Esta única herramienta ETL soporta dos etapas en el ciclo de vida de mi producto de información objetivo:<\/P>Creación del servicio de entidades<\/LI>Aplicar actualizaciones al servicio de entidades bajo demanda<\/LI><\/UL>Para crear el servicio de entidades, el escritor atenuado etiquetado como Creation estaría habilitado y el resto del espacio de trabajo no existiría. Después de la creación del servicio deshabilité este escritor y añadí el resto del espacio de trabajo. El espacio de trabajo aún lee el archivo CSV fuente en una URL pública, pero también lee el servicio de entidades objetivo (que por supuesto ya debe haber sido creado), calcula el upsert<\/A> y delete<\/A> transacciones, y las aplica. Es una herramienta ETL simple y poderosa pero se requiere trabajo crítico habilitador fuera de la herramienta ETL<\/STRONG>.<\/P>El método Append del REST API que soporta operaciones upsert requiere el campo clave match key (House_Number_ID en mi caso):<\/STRONG><\/P>Tener un índice único<\/STRONG><\/LI>No permitir valores nulos<\/STRONG><\/LI><\/UL>Cumplir estas condiciones requiere dos pasos simples fuera de la herramienta ETL antes de que el procesamiento upsert funcione. En mi herramienta ETL, no hay forma de establecer estas propiedades, y hay dos factores relevantes: La herramienta geoprocessing Alter Field<\/A> no soporta cambiar la propiedad allow nulls para un campo en una capa de entidades, pero la herramienta geoprocessing Add Attribute Index<\/A> sí permite< \/STRONG> <\EM> crear un índice único en un campo de capa de entidades.<\P><\P>Para solucionar el problema allow nulls exporté la capa inicial a mi geodatabase predeterminada del proyecto usando la herramienta Export Features<\ /A> y en el control field map deseleccioné<\ /STRONG> la propiedad allow nulls para el campo House_Number_ID.<\ /P><\ P >Export Features to Geodatabase< \ /span >< \ /span >< \ / P >< \ P >Con la clase entidad resultante en Pro, luego creé una capa del mapa, aprovechando para aplicar una simbología distinta al predeterminado pink lemonade, < A title= \ "Overwrite Feature Layer \ " href= \ "https:\/ \/pro.arcgis.com/en/pro-app/latest/help/sharing/overview/overwrite-a-web-layer.htm \ " target= \ "_blank \ " rel= \ "noopener nofollow noreferrer \ "> luego sobrescribí mi capa objetivo < \ / A >.< \ / P >< \ P >Con la capa objetivo sobrescrita, luego añadí un < STRONG > índice único < \ / STRONG > para mi campo clave match key:< \ / P >< \ P >< span class = \ "lia-inline-image-display-wrapper lia-image-align-inline \ " image-alt = \ "Add Unique Index \ " style = \ "width: 999px; \ ">< img src = \ "https:\/ \/us.v-cdn.net/6038851/uploads/images/114478i0D73321C5BB62916/AddUniqueIndex.png \ " role = \ "button \ " title = \ "AddUniqueIndex.png \ " alt = \ "Add Unique Index \ " \/ >< span class = \ "lia-inline-image-caption \ " onclick = \ "event.preventDefault(); \ "> Add Unique Index < \ / span >< \ / span >< \ / P >< \ P >Ahora la capa objetivo está lista para configurar el procesamiento upsert (y delete)!< \ / P >< \ P >El transformador ChangeDetector es lo que genera los conjuntos de cambios upsert y delete. Aquí están las configuraciones:< \ / P >< \ P >< span class = \ "lia-inline-image-display-wrapper lia-image-align-inline \ " image-alt = \ "Change Detector Parameters \ " style = \ "width: 555px; \ ">< img src = \ "https:\/ \/us.v-cdn.net/6038851/uploads/images/114479iBEE9D624F3130598/ChangeDetector.png \ " role = \ "button \ " title = \ "ChangeDetector.png \ " alt = \ "Change Detector Parameters \ " \/ >< span class = \ "lia-inline-image-caption \ " onclick = \ "event.preventDefault(); \ "> Change Detector Parameters < \ / span >< \ / span >< \ / P >< \ P >Usando atributos match attributes:< \ / P >< \ P >< span class = \ "lia-inline-image-display-wrapper lia-image-align-inline \ " image-alt = \ "Detection Fields \ " style = \ "width: 403px; \ ">< img src = \ "https:\/ \/us.v-cdn.net/6038851/uploads/images/114480i175FD2B5B3F0C197/ChangeDetectorFields.png\ Direcciones" \/>Data Pipeline Replacing Los Angeles Addresses<\/span><\/span><\/P>Aprovecharé la oportunidad aquí para destacar que usar Data Pipelines para mantener<\/STRONG><\/EM> capas de características alojadas en ArcGIS Online que fueron creadas por procesos ETL separados<\/STRONG><\/EM> es perfectamente válido. En mi pipeline verás la herramienta Map Fields que ayuda enormemente a conectar el esquema proveniente de un archivo CSV con cómo definí el esquema usando Data Interoperability. <\/P>¡Así que ahí lo tienes, upsert está ahí para ti, listo para usar!<\/P>La descarga del blog tiene mi herramienta Spatial ETL más la caja de herramientas asociada con los modelos.<\/P>
Los Angeles address points<\/span><\/span><\/P>El mapa muestra el resultado del ETL en una capa de entidades alojada, que es mi producto de información objetivo. También podría ser cualquier tipo de geodatabase. Los datos en bruto son típicos de muchas fuentes ETL, con estas propiedades:<\/P> <\/P>Los datos no son accesibles inmediatamente para ArcGIS<\/LI>El esquema de datos es un poco críptico<\/LI>Los datos cambian frecuentemente, pero solo una pequeña fracción de un conjunto grandeLas ediciones pueden ser inserts, updates o deletes<\/STRONG><\/LI>No existen campos metadata para rastrear ediciones<\/LI><\/UL><\/LI>Los datos tienen un campo clave primaria persistente<\/LI><\/OL>#1 y #2 arriba son desafíos básicos de ETL que se resuelven fácilmente. #3 sugiere que upserts y deletes son métodos candidatos, mientras que #4 es lo que hace posible los upserts. Usar una clave de coincidencia es la salsa secreta para esta publicación, pero como en cualquier buen programa de cocina la receta viene después de ver el resultado!<\/P>Upsert & Delete ETL Tool<\/span><\/span><\/P>Esta única herramienta ETL soporta dos etapas en el ciclo de vida de mi producto de información objetivo:<\/P>Creación del servicio de entidades<\/LI>Aplicar actualizaciones al servicio de entidades bajo demanda<\/LI><\/UL>Para crear el servicio de entidades, el escritor atenuado etiquetado como Creation estaría habilitado y el resto del espacio de trabajo no existiría. Después de la creación del servicio deshabilité este escritor y añadí el resto del espacio de trabajo. El espacio de trabajo aún lee el archivo CSV fuente en una URL pública, pero también lee el servicio de entidades objetivo (que por supuesto ya debe haber sido creado), calcula el
Hello everyone. It is worth noting that upsert writes are asynchronous, which for small jobs (as can be created by change detection) has some overhead, so my example scenario isn't ideal. In production you might consider upserts for cases where there are larger update and insert transactions, and use synchronous insert, update and delete write modes for smaller jobs.
Here is a run with some sample feature counts.
Upsert with feature counts
Thanks for the question, I edited the article to hopefully make it clearer where upsert capability is supported in ArcGIS. My worked example uses ArcGIS Data Interoperability, which can work against hundreds of data sources, but see also core geoprocessing supports upsert in the Append geoprocessing tool and ArcGIS Data Pipelines also has an upsert capability.
What products are required for this?
Los miembros registrados pueden publicar, seguir actualizaciones y más. ¿Nuevo aquí? Regístrate para una cuenta gratuita.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.