ArcGIS가 FGDB 테이블 크기 제한 내에 있음에도 불구하고 거대한 CSV 파일에서 파일 지오 데이터베이스 테이블로 모든 레코드를 가져 오지 못함


11

4GB RAM이있는 Windows 7 64 비트에서 ArcGIS 10.0을 사용하고 있습니다.

ArcGIS로 가져 오기 위해 CSV 형식의 매우 큰 테이블이 있으며, 모두 약 30 개의 필드, 테이블 당 5 백만 개 이상의 레코드 (몇 개는 두 배 이상) 및 파일 크기는 최대 약 5GB입니다. 각 파일을 별도의 테이블로 파일 지오 데이터베이스로 가져 오기 위해 궁극적으로 피쳐 클래스에 링크하고 위치에 따라 테이블의 결과를 분석 할 수 있습니다.

문제는 ArcGIS가 특정 시점에서 레코드 가져 오기를 종료 한 것 같습니다. 변환> 지오 데이터베이스로 "테이블에서 테이블로"도구를 사용하고 있지만 "행 복사"도구에 동일한 문제가 있습니다. CSV 파일을 FGDB 테이블로 먼저 변환하지 않고 ArcGIS에 직접 추가하더라도 문제는 동일합니다. 내 테이블 중 하나에 약 1,100 만 개의 레코드가 있으며 ArcGIS는 약 1 천만 개의 레코드 만 가져옵니다. ArcGIS는 오류가 발생했음을 알려주지 않으며 아무 문제가없는 것처럼 도구가 종료됩니다.

나는 지금 몇 번 시도했지만 FGDB 테이블에 기록하는 레코드 수는 항상 동일하며 내가 들어 본 파일 크기 제한으로 보이지 않습니다 (2의 제곱이 아님). 16). ArcGIS는 약 6 백만 개의 레코드가있는 다른 CSV를 가져올 수 있었고 모든 레코드가 통과되었습니다 (큰 테이블에서 발생하는 문제로 인해 더 작은 테이블도 이제는 의심의 여지가 있습니다). ESRI의 웹 사이트는 파일 geodatabase에 다음과 같은 크기 제한을 나열하며 그중 어느 것도 맞지 않습니다.

  • 파일 지오 데이터베이스 크기 : 제한 없음
  • 테이블 또는 기능 클래스 크기 : 1TB (기본값), 4GB 또는 256TB (키워드 포함)
  • 피처 클래스 및 테이블 수 : 2,147,483,647
  • 피쳐 클래스 또는 테이블의 필드 수 : 65,534
  • 피쳐 클래스 또는 테이블의 행 수 : 2,147,483,647
  • 지오 데이터베이스 이름 길이 : 운영 체제가 폴더에서 허용하는 문자 수
  • 피처 클래스 또는 테이블 이름 길이 : 160 자
  • 필드 이름 길이 : 64 자
  • 텍스트 필드 너비 : 2,147,483,647

이 테이블에 실제로해야 할 일은 몇 가지 필드를 추가하고 다른 몇 가지를 삭제하고 새 필드의 값을 생성하는 것입니다 (기존 필드 중 일부의 합계). 필드 계산기에 익숙하고 수백만 개의 레코드로 구성된 테이블을 처리 할 수 있다는 것을 알고 현재까지 알고 있기 때문에 ArcGIS를 사용하고 있습니다. 반면에 대부분의 다른 데스크톱 소프트웨어는 편리합니다 (MS Access / Excel ) 많은 레코드를 질식시킵니다. 따라서 다른 테이블을 사용하여 원본 테이블을 조작 한 다음 결과 테이블을 훨씬 더 작은 ArcGIS로 내보낼 수 있습니다. 실제로, 내가이 문제를 겪고 있고 ArcGIS가 문제가 발생하고 있다는 오류나 경고를주지 않는다는 사실은 ArcGIS 외부에서이 데이터를 가능한 한 많이 처리하려고합니다.


2
"FGDB 테이블에 기록하는 레코드의 수가 항상 같다"면 마지막 레코드와 다음 레코드를 검토하여 이전에 성공적으로 가져온 수백만에 비해 일치하지 않는 것으로 보이는 레코드가 있는지 확인합니다.
PolyGeo

1
좋은 생각. 잘린 FGDB 테이블의 마지막 레코드와 그 이후의 레코드 (CSV에서) 사이에는 차이가 없습니다. 소스 CSV에서 성공적으로 가져온 모든 레코드를 제거한 다음 나머지를 다른 FGDB 테이블로 가져 오려고 시도했습니다. 따라서 하나의 레코드에 문제가없는 것 같습니다. 설상가상으로, 나는 두 개의 FGDB 테이블을 병합했으며 (두 테이블 사이에 모든 소스 레코드가 있음) ArcGIS는 다시 한 번 모든 것이 잘 된 것처럼 보이지만 병합 된 테이블에는 두 개의 10.9 백만 레코드 중 960 만 개만 포함됩니다. FGDB 테이블.
Dan C

ESRI로 지원 사건을 열었습니까? 이 시점에서 잠재적으로 다소 심각한 문제가 될 수있는 것을 발견 한 것 같습니다. 다른 지원이 없다면 지원 담당자는 솔루션을 이미 알고 있거나 테스트에 기꺼이 도움을 줄 수 있기 때문에 이에 대해 알고 싶어 할 것입니다.
공간을 얻는다

Get Spatial에 동의하지만 마지막으로 실행할 수있는 테스트 중 하나는 동일한 값 (아마 "test")을 입력 할 수있는 필드가 하나 인 CSV 파일을 생성하는 것입니다. 이론적으로 960 만 개가 최대치 인 경우이 한계는 1000 만 줄의 "테스트"가 사용될 때마다 발생하지만 950 만 줄은 그렇지 않습니다.
PolyGeo

이제는 다르지만 큰 (1,000 만 개가 넘는) CSV로 시도했지만 같은 방식으로 실패하지만 다른 줄 (약 890 만 개의 레코드가 들어옴)입니다. 따라서 특정 수의 레코드 또는 특정 테이블 크기가 아닌 것 같습니다. 두 개의 필드가 포함 된 테스트 CSV를 시도하고 어떻게되는지 살펴 보겠습니다. 그래도 월요일에 ESRI에 전화 할 것입니다. 오류 메시지 없이이 프로세스가 실패하면 받아 들일 수 없으며 기록을 의심스럽게 만듭니다.
Dan C

답변:


9

나는 이것에 대해 ESRI 지원에 전화를 걸었고 그들의 대답은 고무적이지 않았지만 문제를 설명했습니다. ESRI의 역설 : 32 비트 소프트웨어 인 ArcGIS Desktop은 최대 4GB의 RAM을 사용하는 것으로 제한됩니다. 텍스트 파일은 테이블로 저장되기 전에 RAM에서 처리되어야하므로 ArcGIS가 처리하는 동안 일부 위치에서 RAM 제한에 도달하여 중지했습니다. 가져 오는 파일의 크기는 약 6GB였습니다. 분명히 오류 메시지를주지 않고 실패했다는 사실은 저의 고유 한 사실입니다. 사무실의 다른 사람들이 시도했지만 가져 오기가 여전히 실패했지만 오류 메시지 (유용하지 않은 메시지이지만 적어도 ESRI 담당자는 오류가 발생해야한다고 말했습니다.

내 솔루션은 텍스트 편집기 (EditPad Pro 사용)를 사용하여 파일을 두 개의 작은 CSV로 분할하고 각 파일을 별도의 테이블로 FGDB로 가져온 다음 두 개의 FGDB 테이블을 병합하는 것이 었습니다. 어떤 이유로 든 처음 시도했지만 실패했지만 나중에 작업했습니다. 좀 더 완벽하게 테스트 할 수 있습니다.이 크기의 파일을 지속적으로 처리 할 것입니다.

ArcGIS 10.0을 사용하고 있지만 ArcGIS 10.1 서비스 팩 1이 방금 릴리스되었으며 64 비트 백그라운드 지오 프로세서를 사용할 수있는 기능을 추가하여 지오 프로세서가 4GB 이상의 RAM을 사용할 수있게하므로이 문제를 해결할 수는 없습니다. 그것을 테스트하십시오.

업데이트 : 이제 ArcGIS 10.1 SP1 (64 비트 백그라운드 지오 프로세싱 애드온 포함)을 사용하고 있으며 지금까지 처리 한 거대한 .CSV를 성공적으로 가져옵니다. 14GB의 RAM (예, 14)이있는 머신에서 약 1 천 5 백만 행의 6GB .CSV가 FGDB 테이블로 성공적으로 가져옵니다.


1
64 비트 GDAL 빌드에서 실행할 수 있다면 궁금 할 것입니다. 잘 작동 할 것입니다.
Ragi Yaser Burhum

7

데이터로드를 위해 대용량 CSV 파일을 메모리로 읽는 것은 다소 어리 석습니다. 실제로 한 번에 한 줄만 읽으면됩니다.

파이썬 스크립트를 작성하고 csv모듈을 사용하여 줄 단위로 읽고 행을 테이블에 삽입하는 InsertCursor것이 좋습니다 (또는 바람직하게 arcpy.da.InsertCursor는 빠르지 만 10.1에서만 사용 가능합니다).

편집 : 마지막 단락을 읽으십시오. 실제로 파이썬 에서이 작업을 매우 쉽게 수행 할 수 있으며 결과를 CSV 또는 다른 형식으로 다시 내보낼 수도 있습니다.

각 행과 열로해야 할 일을 정확하게 설명 할 수 있다면 도움이 될 것입니다.


4

5GB CSV 파일을 작은 크기로 분할하려고 했습니까?

행 또는 파일 수를 기준으로 CSV를 분할하는 도구가 있습니다.

파일을 분할 한 다음 가져 오십시오 .. 그러나이 도구에는 제한이 있습니다. 파일의 테이블에서만 작동한다고 생각합니다 (그렇다고 생각합니다). pls. 한 번 해봐.

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


필요한 경우 처리 할 CSV가 많지 않으므로 텍스트 편집기로 수동으로 분할 할 것입니다. 그래도 ArcGIS가 큰 테이블을 오해하고 쓸모없는 오류 메시지를 던지는 일반적인 예의를 갖지 않는 습관을 가지면 문제가 될 것입니다.
Dan C

좋아, 나는 이것을 시도했고 그것은 도중에 작동한다. CSV를 두 개의 작은 것으로 (수동으로 텍스트 편집기 사용) 분할 한 후 두 개의 개별 FGDB 테이블로 가져 왔으며 모든 레코드가 있습니다. 그러나이 두 FGDB 테이블을 하나로 병합하려고하면 ArcGIS가 아무 문제가없는 것처럼 프로세스를 다시 한 번 실행 한 다음 병합 된 테이블에 130 만 개의 레코드가 없습니다.
Dan C

2

큰 파이프 구분 텍스트 파일 (2,712,391) 행의 같은 줄 에서이 오류 (001156)가 발생했습니다.
그래서 그 줄에 문제가 있다고 생각했지만 나머지 행과 동일했습니다.
부분 가져 오기에서 행을 삭제 한 다음 데이터를로드 (로드>로드 데이터 ...)하고 모든 2M + 라인을 얻을 수있었습니다.

나도 16GB의 RAM에서 64 비트 백그라운드 지오 프로세싱을 갖춘 10.1 SP1을 사용하고 있으며 RAM을 활용하는 프로세스입니다 (모든 프로세스가 64 비트로 아직 활성화되어 있지는 않습니다).
느리고 klunky 해결 방법이지만 일관되게 작동합니다.
가져 오기에 성공하지 못하면 빈 테이블을 먼저 설정해야 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.