ArcGIS nie importuje wszystkich rekordów z ogromnego pliku CSV do pliku tabeli geobazy, mimo że mieści się w limitach wielkości tabeli FGDB

11

Korzystam z ArcGIS 10.0 na Windows 7 64-bit z 4 GB pamięci RAM.

Mam kilka bardzo dużych tabel w formacie CSV do zaimportowania do ArcGIS, wszystkie mają około 30 pól, w górę od 5 milionów rekordów na tabelę (kilka ma dwa razy więcej lub więcej) i rozmiary plików do około 5 GB. Próbuję zaimportować każdy z nich do geobazy danych pliku jako osobne tabele, aby ostatecznie połączyć je z klasą obiektów i przeanalizować wyniki w tabelach zgodnie z ich lokalizacją.

Problem polega na tym, że ArcGIS wydaje się po prostu kończyć importowanie rekordów w pewnym momencie. Używam narzędzia „Tabela do tabeli” w obszarze Konwersja> Do geobazy, ale narzędzie „Kopiuj wiersze” ma ten sam problem. Nawet jeśli po prostu dodam plik CSV bezpośrednio do ArcGIS bez uprzedniej próby przekonwertowania go na tabelę FGDB, problem jest taki sam. Jedna z moich tabel ma około 11 milionów rekordów, a ArcGIS importuje tylko około 10 milionów z nich. ArcGIS nie mówi mi, że wystąpił jakikolwiek błąd, narzędzie kończy się tak, jakby nic się nie stało.

Próbowałem już kilka razy, a liczba rekordów, które trafiły do ​​tabeli FGDB, jest zawsze taka sama i nie wydaje się, aby był to limit wielkości plików, o jakim kiedykolwiek słyszałem (nie kwadrat 2 lub 16). ArcGIS był w stanie zaimportować kolejny plik CSV z około 6 milionami rekordów i wszystkie rekordy przeszły (chociaż z problemami, które mam z większym stołem, mniejszy też jest teraz podejrzany). Witryna ESRI wymienia następujące limity wielkości w geobazie plików i daleko mi do trafienia w którekolwiek z nich:

  • Rozmiar geobazy bazy danych: Bez limitu
  • Rozmiar tabeli lub klasy elementów: 1 TB (domyślnie), 4 GB lub 256 TB ze słowem kluczowym
  • Liczba klas obiektów i tabel: 2 147 483 647
  • Liczba pól w klasie obiektów lub tabeli: 65 534
  • Liczba wierszy w klasie obiektów lub tabeli: 2 147 483 647
  • Długość nazwy geobazy: liczba znaków, którą system operacyjny dopuszcza w folderze
  • Długość nazwy klasy obiektu lub tabeli: 160 znaków
  • Długość nazwy pola: 64 znaki
  • Szerokość pola tekstowego: 2 147 483 647

Wszystko, co naprawdę muszę zrobić z tymi tabelami, to dodać kilka pól, usunąć kilka innych i wygenerować wartości dla nowych pól (sumy kilku istniejących pól). Używam do tego ArcGIS, ponieważ znam kalkulator pola i wiem (lub wiedziałem do tej pory), że może on obsługiwać tabele składające się z milionów rekordów, podczas gdy większość innych programów komputerowych, które mam pod ręką (MS Access / Excel ) dusi się na tak wielu płytach. Jestem więc otwarty na użycie innego oprogramowania do manipulowania oryginalną tabelą, a następnie eksportowania (znacznie mniejszej) tabeli wynikowej do ArcGIS. Naprawdę, fakt, że mam ten problem i że ArcGIS nie daje mi żadnych błędów ani ostrzeżeń, że problem występuje, sprawia, że ​​chcę przetwarzać te dane poza ArcGIS w jak największym stopniu.

Dan C.
źródło
2
Jeśli „liczba rekordów, które trafiają do tabeli FGDB, jest zawsze taka sama”, rzuciłbym okiem na ostatnie i następne rekordy, aby zobaczyć, czy mogą one zawierać coś, co wygląda niespójnie w porównaniu z milionami pomyślnie zaimportowanymi wcześniej.
PolyGeo
1
Dobry pomysł. Nie widzę żadnej różnicy między ostatnim rekordem w skróconej tabeli FGDB a rekordem po nim (z CSV). Właśnie próbowałem usunąć wszystkie pomyślnie zaimportowane rekordy ze źródłowego pliku CSV, a następnie zaimportować resztę do innej tabeli FGDB i zadziałało. Więc to nie wydaje się być problemem z żadnym rekordem. Co gorsza, połączyłem dwie tabele FGDB (między nimi mam wszystkie rekordy źródłowe) i po raz kolejny ArcGIS udaje, że wszystko poszło dobrze, ale scalona tabela zawiera tylko 9,6 miliona z 10,9 miliona rekordów z dwóch Tabele FGDB.
Dan C
Czy otworzyłeś incydent wsparcia z ESRI? Wygląda na to, że w tym momencie odkryłeś, co może być poważnym problemem. Jeśli nic więcej, pracownicy pomocy technicznej byliby zainteresowani wiedzą o tym po prostu dlatego, że mogą już znać rozwiązanie lub byliby gotowi pomóc w testowaniu.
Uzyskaj Spatial
Zgadzam się z Get Spatial, ale ostatnim testem, który możesz chcieć uruchomić, jest wygenerowanie pliku CSV z jednym polem, w którym umieszczasz identyczne wartości (być może „test”). Jeśli twoja teoria głosi, że 9,6 miliona to maksimum, to limit ten zostałby osiągnięty za każdym razem, gdy zostanie użytych 10 milionów linii „testowych”, ale nie przy 9,5 miliona linii.
PolyGeo
Próbowałem teraz z innym, ale także dużym (ponad 10 milionów rekordów) CSV i nie udaje się to w ten sam sposób, ale na innej linii (dostaje się około 8,9 miliona rekordów). Nie wydaje się więc, aby była to określona liczba rekordów lub konkretny rozmiar tabeli. Spróbuję przetestować CSV z dwoma polami i zobaczę, co się stanie. W każdy poniedziałek zadzwonię do ESRI, ten proces zakończony niepowodzeniem bez komunikatu o błędzie jest niedopuszczalny i powoduje, że podejrzane są nawet rekordy.
Dan C

Odpowiedzi:

9

Zadzwoniłem do wsparcia ESRI w tej sprawie, a ich odpowiedź nie była zachęcająca, ale wyjaśniła problem. Parafrazując ESRI: Problem polega na tym, że ArcGIS Desktop, jako oprogramowanie 32-bitowe, ogranicza się do użycia maksymalnie 4 GB pamięci RAM. Plik tekstowy musi zostać przetworzony w pamięci RAM, zanim zostanie zapisany jako tabela, więc w pewnym momencie ArcGIS osiągnął limit pamięci RAM i po prostu się tam zatrzymał. Plik, który importowałem, miał rozmiar około 6 GB. Najwyraźniej fakt, że nie powiodło się bez podania komunikatu o błędzie jest dla mnie unikalny, próbowałem zmusić inne osoby w moim biurze do zrobienia tego i import nadal nie powiódł się, ale dał komunikat o błędzie (niepomocny, ale przynajmniej coś, co pozwoliło użytkownik wie, że coś poszło nie tak), a przedstawiciel ESRI powiedział, że powinien dać błąd.

Moim rozwiązaniem było podzielenie pliku na dwa mniejsze pliki CSV za pomocą edytora tekstu (użyłem EditPad Pro), zaimportowanie każdego z nich do FGDB jako osobnej tabeli, a następnie scalenie dwóch tabel FGDB. Z jakiegoś powodu nie udało się to za pierwszym razem, gdy spróbowałem, ale później działało. Mogę przejść do testowania tego trochę pełniej, będę miał do czynienia z plikami tego rozmiaru na bieżąco.

Korzystam z ArcGIS 10.0, ale dodatek Service Pack 1 ArcGIS 10.1 został właśnie wydany i dodaje możliwość korzystania z 64-bitowego geoprocesora w tle, co pozwoli geoprocesorowi na użycie więcej niż 4 GB pamięci RAM, co może rozwiązać ten problem, ale nie mogę przetestuj to.

AKTUALIZACJA: Używam teraz ArcGIS 10.1 SP1 (z 64-bitowym dodatkiem do geoprzetwarzania w tle) i z powodzeniem importuje te gigantyczne .CSV, przynajmniej te, z którymi miałem do tej pory do czynienia. Na maszynie z 14 GB pamięci RAM (tak, 14), 6 GB .CSV z około 10,5 milionami wierszy pomyślnie importuje się do tabeli FGDB.

Dan C.
źródło
1
Byłbym ciekawy, czy możesz spróbować uruchomić go w 64-bitowej wersji GDAL. Założę się, że działałoby dobrze.
Ragi Yaser Burhum
7

Do ładowania danych wczytywanie dużego pliku CSV do pamięci jest raczej głupie. Tylko tak naprawdę musi czytać 1 linię na raz.

Sugerowałbym napisanie skryptu Python i użycie csvmodułu do odczytania go wiersz po wierszu i wstawienie wierszy do tabeli za pomocą InsertCursor(lub najlepiej, arcpy.da.InsertCursorponieważ jest szybszy, ale dostępny tylko w wersji 10.1).

Edycja: po prostu przeczytaj ostatni akapit. Wygląda na to, że prawdopodobnie mógłbyś to zrobić całkiem łatwo w Pythonie, nawet eksportując wyniki z powrotem do CSV lub innego formatu.

Jeśli możesz dokładnie opisać, co musisz zrobić z każdym wierszem i kolumną, które byłyby pomocne.

blah238
źródło
4

Czy próbowałeś podzielić pliki csv 5 GB na małe.

istnieje narzędzie do dzielenia csv na podstawie liczby wierszy lub plików.

Podziel pliki, a następnie spróbuj zaimportować. Ale to narzędzie jest ograniczone, myślę, że będzie działać tylko dla tabeli w pliku (tak myślę). proszę Spróbuj.

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

vadivelan
źródło
Planuję spróbować, jeśli będę musiał, nie ma zbyt wielu plików CSV, więc prawdopodobnie po prostu podzielę je ręcznie za pomocą mojego edytora tekstu. Wciąż chciałbym dowiedzieć się, czy ktoś jeszcze miał ten problem, jeśli ArcGIS będzie miał zwyczaj nieporozumienia z dużymi tabelami, a nawet zwykłej uprzejmości do rzucenia bezużytecznego komunikatu o błędzie, to będzie problem.
Dan C
OK, właśnie tego spróbowałem i działa to w połowie. Po podzieleniu CSV na dwa mniejsze (ręcznie, za pomocą edytora tekstu), pomyślnie zaimportowano do dwóch oddzielnych tabel FGDB i wszystkie rekordy tam są. Ale kiedy próbuję scalić te dwie tabele FGDB w jedną, ArcGIS ponownie przebiega przez proces, jakby nic się nie stało, a następnie w scalonej tabeli brakuje 1,3 miliona rekordów.
Dan C
2

Wystąpił ten błąd (001156) w tym samym wierszu dużego pliku tekstowego rozdzielonego potokami (2712391) w około jednej czwartej.
Pomyślałem więc, że coś jest nie tak z tą linią, ale było identyczne z resztą wierszy.
Skończyłem usuwanie wierszy z częściowego importu, a następnie ładowanie danych (ładuj> ładuj dane ...) i udało mi się uzyskać wszystkie linie 2M +.

Ja również używam 10.1 SP1 z 64-bitowym geoprzetwarzaniem w tle na 16 GB pamięci RAM i jest to proces, który wykorzysta pamięć RAM (nie każdy proces jest jeszcze włączony w wersji 64-bitowej).
Powolne, nieporęczne obejście, ale działa konsekwentnie.
Być może będziesz musiał najpierw skonfigurować pustą tabelę, jeśli nie uda ci się przy jakimkolwiek stopniu importu.

Matt
źródło