ArcGIS no puede importar todos los registros del archivo CSV enorme a la tabla de geodatabase de archivos a pesar de estar dentro de los límites de tamaño de la tabla FGDB

11

Estoy usando ArcGIS 10.0 en Windows 7 de 64 bits con 4 GB de RAM.

Tengo algunas tablas muy grandes en formato CSV para importar a ArcGIS, todas tienen alrededor de 30 campos, más de 5 millones de registros por tabla (algunas tienen el doble de eso o más) y tamaños de archivo de hasta aproximadamente 5 GB. Estoy tratando de importar cada uno de ellos en una geodatabase de archivos como tablas separadas para poder, en última instancia, vincularlos a una clase de entidad y analizar los resultados en las tablas según su ubicación.

El problema es que ArcGIS parece simplemente dejar de importar registros en cierto punto. Estoy usando la herramienta "Tabla a tabla" en Conversión> A geodatabase, pero la herramienta "Copiar filas" tiene el mismo problema. Incluso si solo agrego el archivo CSV directamente a ArcGIS sin intentar convertirlo primero en una tabla FGDB, el problema es el mismo. Una de mis tablas tiene alrededor de 11 millones de registros, y ArcGIS solo importa alrededor de 10 millones de ellos. ArcGIS no me dice que se haya producido ningún error, la herramienta simplemente termina como si nada estuviera mal.

Lo he intentado varias veces y la cantidad de registros que entran en la tabla FGDB es siempre la misma, y ​​no parece ser un límite de tamaño de archivo del que haya oído hablar (no un cuadrado de 2 o dieciséis). ArcGIS pudo importar otro CSV con aproximadamente 6 millones de registros y todos los registros salieron (aunque con los problemas que estoy teniendo con la tabla más grande, el más pequeño ahora es sospechoso). El sitio web de ESRI enumera los siguientes límites de tamaño en una geodatabase de archivos , y estoy lejos de llegar a ninguno de ellos:

  • Tamaño de la geodatabase de archivos: sin límite
  • Tamaño de clase de tabla o entidad: 1 TB (predeterminado), 4 GB o 256 TB con palabra clave
  • Número de clases de entidad y tablas: 2,147,483,647
  • Número de campos en una clase de entidad o tabla: 65,534
  • Número de filas en una clase de entidad o tabla: 2,147,483,647
  • Longitud del nombre de la geodatabase: número de caracteres que permite el sistema operativo en una carpeta
  • Clase de entidad o longitud del nombre de la tabla: 160 caracteres
  • Longitud del nombre del campo: 64 caracteres
  • Ancho del campo de texto: 2,147,483,647

Todo lo que realmente necesito hacer en estas tablas es agregar un par de campos, eliminar un par de otros y generar valores para los nuevos campos (sumas de algunos de los campos existentes). Estoy usando ArcGIS para ello porque estoy familiarizado con la calculadora de campo y sé (o sabía , hasta ahora) que podría manejar tablas que consisten en millones de registros, mientras que la mayoría del otro software de escritorio que tengo a mano (MS Access / Excel ) se ahoga en tantos registros. Por lo tanto, estoy dispuesto a usar algún otro software para manipular la tabla original y luego exportar la tabla resultante (mucho más pequeña) a ArcGIS. Realmente, el hecho de que estoy teniendo este problema y que ArcGIS no me está dando ningún error o advertencia de que el problema está ocurriendo incluso me hace querer manejar estos datos fuera de ArcGIS tanto como sea posible.

Dan C
fuente
2
Si "el número de registros que entran en la tabla FGDB es siempre el mismo", entonces miraría el último y el siguiente registro para ver si pueden tener algo en ellos que parezca inconsistente en comparación con los millones importados con éxito anteriormente.
PolyGeo
1
Buena idea. No puedo ver ninguna diferencia entre el último registro en la tabla FGDB truncada y el registro posterior (del CSV). Intenté eliminar todos los registros importados con éxito del CSV de origen, luego importé el resto a otra tabla FGDB, y funcionó. Por lo tanto, no parece ser un problema con ningún registro. Para empeorar las cosas, fusioné las dos tablas FGDB (entre las dos tengo todos los registros de origen), y una vez más ArcGIS finge que todo salió bien, pero la tabla fusionada contiene solo 9.6 millones de los 10.9 millones de registros de los dos Tablas FGDB.
Dan C
¿Has abierto un incidente de soporte con ESRI? Parece que en este punto, has descubierto lo que podría ser un problema bastante serio. Por lo menos, el personal de soporte estaría interesado en saberlo simplemente porque tal vez ya conozcan una solución o estén dispuestos a ayudar con las pruebas.
Obtener espacial
Estoy de acuerdo con Get Spatial, pero una última prueba que puede ejecutar es generar un archivo CSV con un campo en el que coloque valores idénticos (quizás "prueba"). Si su teoría es que 9.6 millones es el máximo, entonces este límite se alcanzaría cada vez que se usen 10 millones de líneas de "prueba", pero no cuando se usan 9.5 millones de líneas.
PolyGeo
Ahora he intentado con un CSV diferente, pero también grande (más de 10 millones de registros) y falla de la misma manera, pero en una línea diferente (entran aproximadamente 8.9 millones de registros). Por lo tanto, no parece ser un número específico de registros o un tamaño de tabla específico. Probaré un CSV de prueba con dos campos y veré qué sucede. Sin embargo, llamaré a ESRI el lunes de cualquier manera, este proceso que falla sin ningún mensaje de error es inaceptable y hace que incluso los registros que lo hacen sean sospechosos.
Dan C

Respuestas:

9

Llamé al soporte de ESRI sobre esto y su respuesta no fue alentadora, pero sí explicó el problema. Parafraseando a ESRI: El problema es que ArcGIS Desktop, al ser un software de 32 bits, está limitado a usar 4 GB de RAM como máximo. El archivo de texto debe procesarse en RAM antes de almacenarse como una tabla, por lo que en algún momento durante el procesamiento, ArcGIS estaba llegando al límite de RAM y simplemente se detenía allí. El archivo que estaba importando tenía un tamaño de alrededor de 6 GB. Aparentemente, el hecho de que falló sin dar un mensaje de error es exclusivo para mí, intenté que otras personas en mi oficina lo hicieran y la importación aún falló, pero dio un mensaje de error (uno inútil, pero al menos algo que permitió que el el usuario sabe que algo salió mal), y el representante de ESRI dijo que debería dar un error.

Mi solución fue dividir el archivo en dos CSV más pequeños usando un editor de texto (utilicé EditPad Pro), importar cada uno de ellos en un FGDB como una tabla separada, luego fusionar las dos tablas FGDB. Por alguna razón, esto falló la primera vez que lo intenté, pero funcionó más tarde. Puedo probar esto un poco más a fondo, voy a tratar con archivos de este tamaño de forma continua.

Estoy usando ArcGIS 10.0, pero ArcGIS 10.1 service pack 1 se acaba de lanzar y agrega la capacidad de usar un geoprocesador de fondo de 64 bits, lo que permitirá que el geoprocesador use más de 4 GB de RAM, eso puede solucionar este problema, pero no puedo prueba eso.

ACTUALIZACIÓN: ahora estoy usando ArcGIS 10.1 SP1 (con el complemento de geoprocesamiento de fondo de 64 bits) y importa con éxito estos .CSV gigantes, al menos los que he tratado hasta ahora. En una máquina con 14 GB de RAM (sí, 14), un .CSV de 6 GB con aproximadamente 10,5 millones de filas se importa con éxito a una tabla FGDB.

Dan C
fuente
1
Tendría curiosidad si pudiera intentar ejecutarlo en una versión de 64 bits de GDAL. Apuesto a que funcionaría bien.
Ragi Yaser Burhum
7

Para fines de carga de datos, leer un gran archivo CSV en la memoria es bastante tonto. Solo necesita leer 1 línea a la vez.

Sugeriría escribir un script de Python y usar el csvmódulo para leerlo línea por línea e insertar filas en la tabla usando un InsertCursor(o preferiblemente un, arcpy.da.InsertCursorya que es más rápido, pero solo está disponible en 10.1).

Editar: solo lea su último párrafo. Parece que en realidad podría hacer todo esto dentro de Python con bastante facilidad, incluso exportando los resultados a CSV u otro formato.

Si pudiera describir exactamente lo que necesita hacer con cada fila y columna, eso sería útil.

blah238
fuente
4

¿Has intentado dividir los archivos csv de 5 GB en pequeños?

hay una herramienta para dividir el csv en función de las filas o el recuento de archivos.

Divida los archivos y luego intente importarlos. Pero hay una limitación en esta herramienta, creo que funcionará solo para la tabla en un archivo (creo que sí). por favor intentalo.

http://www.shivaranjan.com/2008/11/06/how-to-split-csv-file-into-multiple-parts-easily-and-quickly/

vadivelan
fuente
Tengo la intención de intentarlo si tengo que hacerlo, no hay muchos CSV con los que lidiar, por lo que probablemente los dividiré manualmente con mi editor de texto. Sin embargo, todavía me gustaría saber si alguien más ha tenido este problema, si ArcGIS se va a habituar a entender mal las tablas grandes y ni siquiera tiene la cortesía común de lanzar un mensaje de error inútil, eso será un problema.
Dan C
OK, acabo de probar esto y funciona hasta la mitad. Después de dividir el CSV en dos más pequeños (manualmente, con un editor de texto), importaron con éxito a dos tablas FGDB separadas y todos los registros están allí. Pero cuando trato de fusionar esas dos tablas FGDB en una, ArcGIS vuelve a ejecutar el proceso como si nada estuviera mal, y luego a la tabla fusionada le faltan 1.3 millones de registros.
Dan C
2

Me encontraba con este error (001156) en la misma línea de un gran archivo de texto delimitado por tuberías (2.712.391) filas aproximadamente un cuarto del camino.
Así que pensé que había algo mal con esa línea, pero era idéntica al resto de las filas.
Terminé eliminando las filas de la importación parcial y luego cargando los datos (Cargar> Cargar datos ...) y pude obtener todas las líneas 2M +.

Yo también estoy usando 10.1 SP1 con geoprocesamiento en segundo plano de 64 bits en 16 GB de RAM y es un proceso que utilizará la RAM (no todos los procesos están habilitados en 64 bits todavía).
Solución lenta y poco sólida, pero funciona de manera consistente.
Es posible que primero deba configurar la tabla vacía si no tiene éxito con ningún grado de importación.

Mate
fuente