ArcGIS kann nicht alle Datensätze aus einer riesigen CSV-Datei in eine Geodatabase-Tabelle importieren, obwohl die Größenbeschränkungen für FGDB-Tabellen eingehalten werden

11

Ich verwende ArcGIS 10.0 unter Windows 7 64-Bit mit 4 GB RAM.

Ich habe einige sehr große Tabellen im CSV-Format, die in ArcGIS importiert werden sollen. Alle haben ungefähr 30 Felder, mehr als 5 Millionen Datensätze pro Tabelle (einige haben das Doppelte oder mehr) und Dateigrößen von bis zu 5 GB. Ich versuche, jede von ihnen als separate Tabellen in eine Datei-Geodatabase zu importieren, damit ich sie letztendlich mit einer Feature-Class verknüpfen und die Ergebnisse in den Tabellen nach ihrem Speicherort analysieren kann.

Das Problem ist, dass ArcGIS den Import von Datensätzen an einem bestimmten Punkt zu beenden scheint. Ich verwende das Tool "Tabelle zu Tabelle" unter Konvertierung> In Geodatabase, aber das Tool "Zeilen kopieren" hat das gleiche Problem. Selbst wenn ich die CSV-Datei nur direkt zu ArcGIS hinzufüge, ohne vorher zu versuchen, sie in eine FGDB-Tabelle zu konvertieren, ist das Problem dasselbe. Eine meiner Tabellen enthält ungefähr 11 Millionen Datensätze, und ArcGIS importiert nur ungefähr 10 Millionen davon. ArcGIS teilt mir nicht mit, dass ein Fehler aufgetreten ist. Das Tool wird nur so beendet, als ob nichts falsch wäre.

Ich habe es jetzt ein paar Mal versucht und die Anzahl der Datensätze, die es in die FGDB-Tabelle schaffen, ist immer gleich und scheint keine Dateigrößenbeschränkung zu sein, von der ich jemals gehört habe (kein Quadrat von 2 oder 16). ArcGIS konnte eine weitere CSV mit ungefähr 6 Millionen Datensätzen importieren und alle Datensätze kamen durch (obwohl bei den Problemen, die ich mit der größeren Tabelle habe, die kleinere jetzt auch verdächtig ist). Auf der ESRI-Website sind die folgenden Größenbeschränkungen in einer Datei-Geodatabase aufgeführt , und ich bin weit davon entfernt, eine davon zu treffen:

  • Größe der Geodatabase-Datei: Keine Begrenzung
  • Tabellen- oder Feature-Class-Größe: 1 TB (Standard), 4 GB oder 256 TB mit Schlüsselwort
  • Anzahl der Feature-Classes und Tabellen: 2.147.483.647
  • Anzahl der Felder in einer Feature-Class oder Tabelle: 65.534
  • Anzahl der Zeilen in einer Feature-Class oder Tabelle: 2.147.483.647
  • Länge des Geodatabase-Namens: Anzahl der Zeichen, die das Betriebssystem in einem Ordner zulässt
  • Länge des Feature-Class- oder Tabellennamens: 160 Zeichen
  • Feldname Länge: 64 Zeichen
  • Textfeldbreite: 2.147.483.647

Alles, was ich wirklich für diese Tabellen tun muss, ist, ein paar Felder hinzuzufügen, ein paar andere zu löschen und Werte für die neuen Felder zu generieren (Summen einiger der vorhandenen Felder). Ich verwende ArcGIS dafür, weil ich mit dem Feldrechner vertraut bin und weiß (oder bis jetzt wusste ), dass er Tabellen mit Millionen von Datensätzen verarbeiten kann, während die meisten anderen Desktop-Programme, die ich zur Hand habe (MS Access / Excel) ) würgt an so vielen Platten. Daher bin ich offen dafür, eine andere Software zu verwenden, um die ursprüngliche Tabelle zu bearbeiten und dann die (viel kleinere) resultierende Tabelle nach ArcGIS zu exportieren. Die Tatsache, dass ich dieses Problem habe und ArcGIS mir keine Fehler oder Warnungen gibt, dass das Problem überhaupt auftritt, veranlasst mich, diese Daten so weit wie möglich außerhalb von ArcGIS zu verarbeiten.

Dan C.
quelle
2
Wenn "die Anzahl der Datensätze, die es in die FGDB-Tabelle schaffen, immer gleich ist", würde ich mir die letzten und nächsten Datensätze ansehen, um festzustellen, ob sie möglicherweise etwas enthalten, das im Vergleich zu den zuvor erfolgreich importierten Millionen inkonsistent aussieht.
PolyGeo
1
Gute Idee. Ich kann keinen Unterschied zwischen dem letzten Datensatz in der abgeschnittenen FGDB-Tabelle und dem darauf folgenden Datensatz (aus der CSV) feststellen. Ich habe gerade versucht, alle erfolgreich importierten Datensätze aus der Quell-CSV zu entfernen und dann den Rest in eine andere FGDB-Tabelle zu importieren, und es hat funktioniert. Es scheint also kein Problem mit einem Datensatz zu sein. Um die Sache noch schlimmer zu machen, habe ich die beiden FGDB-Tabellen zusammengeführt (zwischen den beiden habe ich alle Quelldatensätze), und ArcGIS gibt erneut vor, dass alles in Ordnung war, aber die zusammengeführte Tabelle enthält nur 9,6 Millionen der 10,9 Millionen Datensätze der beiden FGDB-Tabellen.
Dan C
Haben Sie einen Support-Vorfall mit ESRI eröffnet? An diesem Punkt haben Sie anscheinend entdeckt, was möglicherweise ein ziemlich ernstes Problem sein könnte. Wenn nichts anderes, wären die Support-Mitarbeiter daran interessiert, dies zu erfahren, nur weil sie möglicherweise bereits eine Lösung kennen oder bereit wären, beim Testen zu helfen.
Holen Sie sich Spatial
Ich stimme Get Spatial zu, aber ein letzter Test, den Sie möglicherweise ausführen möchten, ist das Generieren einer CSV-Datei mit einem Feld, in das Sie identische Werte einfügen (möglicherweise "Test"). Wenn Ihre Theorie besagt, dass 9,6 Millionen das Maximum sind, wird diese Grenze immer dann erreicht, wenn 10 Millionen Zeilen "Test" verwendet werden, jedoch nicht, wenn 9,5 Millionen Zeilen verwendet werden.
PolyGeo
Ich habe es jetzt mit einer anderen, aber auch großen (über 10 Millionen Datensätze) CSV versucht und es schlägt auf die gleiche Weise fehl, aber in einer anderen Zeile (ungefähr 8,9 Millionen Datensätze kommen herein). Es scheint also keine bestimmte Anzahl von Datensätzen oder eine bestimmte Tabellengröße zu sein. Ich werde eine Test-CSV mit zwei Feldern versuchen und sehen, was passiert. Ich werde ESRI trotzdem am Montag anrufen. Dieser Prozess, der ohne Fehlermeldung fehlschlägt, ist inakzeptabel und macht sogar die Datensätze verdächtig.
Dan C

Antworten:

9

Ich habe den ESRI-Support angerufen und ihre Antwort war nicht ermutigend, aber sie hat das Problem erklärt. Paraphrasierung von ESRI: Das Problem ist, dass ArcGIS Desktop als 32-Bit-Software höchstens 4 GB RAM verwendet. Die Textdatei muss im RAM verarbeitet werden, bevor sie als Tabelle gespeichert werden kann. Daher hat ArcGIS während der Verarbeitung das RAM-Limit erreicht und nur dort angehalten. Die Datei, die ich importierte, war ungefähr 6 GB groß. Anscheinend ist die Tatsache, dass es fehlgeschlagen ist, ohne eine Fehlermeldung zu geben, einzigartig für mich. Ich habe versucht, andere Leute in meinem Büro dazu zu bringen, und der Import ist immer noch fehlgeschlagen, aber es gab eine Fehlermeldung (eine nicht hilfreiche, aber zumindest etwas, das das zulässt Benutzer wissen, dass etwas schief gelaufen ist), und der ESRI-Mitarbeiter sagte, dass es einen Fehler geben sollte.

Meine Lösung bestand darin, die Datei mit einem Texteditor (ich habe EditPad Pro verwendet) in zwei kleinere CSVs aufzuteilen, jede davon als separate Tabelle in eine FGDB zu importieren und dann die beiden FGDB-Tabellen zusammenzuführen. Aus irgendeinem Grund schlug dies fehl, als ich es zum ersten Mal versuchte, aber später funktionierte. Möglicherweise werde ich dies etwas ausführlicher testen. Ich werde mich fortlaufend mit Dateien dieser Größe befassen.

Ich verwende ArcGIS 10.0, aber ArcGIS 10.1 Service Pack 1 wurde gerade veröffentlicht und bietet die Möglichkeit, einen 64-Bit-Hintergrund-Geoprozessor zu verwenden, mit dem der Geoprozessor mehr als 4 GB RAM verwenden kann. Dies kann dieses Problem möglicherweise beheben, aber ich kann nicht teste das.

UPDATE: Ich verwende jetzt ArcGIS 10.1 SP1 (mit dem 64-Bit-Hintergrund-Geoverarbeitungs-Addon) und es importiert erfolgreich diese riesigen CSVs, zumindest die, mit denen ich mich bisher befasst habe. Auf einem Computer mit 14 GB RAM (ja, 14) wird ein 6 GB CSV mit etwa 10,5 Millionen Zeilen erfolgreich in eine FGDB-Tabelle importiert.

Dan C.
quelle
1
Ich wäre gespannt, ob Sie versuchen könnten, es in einem 64-Bit-Build von GDAL auszuführen. Ich wette, es würde gut funktionieren.
Ragi Yaser Burhum
7

Zum Laden von Daten ist das Lesen einer riesigen CSV-Datei in den Speicher ziemlich dumm. Es muss immer nur 1 Zeile gleichzeitig gelesen werden.

Ich würde vorschlagen, ein Python-Skript zu schreiben und das csvModul zu verwenden, um es Zeile für Zeile zu lesen und Zeilen mit einem InsertCursor(oder vorzugsweise einem, arcpy.da.InsertCursorda es schneller ist, aber nur bei 10.1 verfügbar ist) in die Tabelle einzufügen .

Bearbeiten: Lesen Sie einfach Ihren letzten Absatz. Es hört sich so an, als könnten Sie dies wahrscheinlich alles in Python ganz einfach tun und sogar die Ergebnisse wieder in CSV oder ein anderes Format exportieren.

Wenn Sie genau beschreiben könnten, was Sie mit jeder Zeile und Spalte tun müssen, wäre dies hilfreich.

blah238
quelle
4

Haben Sie versucht, die 5-GB-CSV-Dateien in kleine Dateien aufzuteilen?

Es gibt ein Tool zum Aufteilen der CSV basierend auf Zeilen oder Dateizahl.

Teilen Sie die Dateien und versuchen Sie dann zu importieren. Aber es gibt eine Einschränkung in diesem Tool, ich denke, es wird nur für Tabellen in einer Datei funktionieren (ich denke schon). pls. Versuche es.

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

Vadivelan
quelle
Ich habe vor, das zu versuchen, wenn ich muss, gibt es nicht so viele CSVs, mit denen ich mich befassen muss, also werde ich sie wahrscheinlich einfach manuell mit meinem Texteditor teilen. Ich würde immer noch gerne herausfinden, ob jemand anderes dieses Problem hatte. Wenn ArcGIS es sich zur Gewohnheit macht, große Tabellen falsch zu verstehen und nicht einmal die allgemeine Höflichkeit zu haben, eine nutzlose Fehlermeldung auszulösen, wird dies ein Problem sein.
Dan C
OK, ich habe es gerade versucht und es funktioniert teilweise. Nachdem die CSV in zwei kleinere aufgeteilt wurde (manuell mit einem Texteditor), wurden sie erfolgreich in zwei separate FGDB-Tabellen importiert, und alle Datensätze sind vorhanden. Wenn ich jedoch versuche, diese beiden FGDB-Tabellen zu einer zusammenzuführen, durchläuft ArcGIS den Vorgang erneut, als ob nichts falsch wäre, und in der zusammengeführten Tabelle fehlen 1,3 Millionen Datensätze.
Dan C
2

Ich bin auf diesen Fehler (001156) in derselben Zeile einer großen, durch Pipe getrennten Textdatei (2.712.391) gestoßen, die ungefähr ein Viertel des Weges durchläuft.
Also dachte ich, dass mit dieser Zeile etwas nicht stimmt, aber sie war identisch mit dem Rest der Zeilen.
Am Ende habe ich die Zeilen aus dem Teilimport gelöscht und dann die Daten geladen (Laden> Daten laden ...) und konnte alle 2M + Zeilen abrufen.

Ich verwende auch 10.1 SP1 mit 64-Bit-Hintergrund-Geoverarbeitung auf 16 GB RAM und es ist ein Prozess, der den RAM verwendet (noch ist nicht jeder Prozess in 64-Bit aktiviert).
Langsame, klunkige Problemumgehung, aber es funktioniert konsistent.
Möglicherweise müssen Sie zuerst die leere Tabelle einrichten, wenn Sie mit einem Importgrad keinen Erfolg haben.

Matt
quelle