인구 조사 데이터로 작업하고 있으며 각각 600ish 열 / 변수가있는 여러 CSV 파일을 다운로드했습니다. 쿼리 가능한 데이터베이스에 모두 저장하고 싶지만 지금까지 시도한 모든 내용 (MS Access, Arc geodatabase 테이블)은 테이블을 256 개의 열로 자릅니다. DBA가 아닌 사람이 액세스 할 수있는 큰 테이블을 처리하기위한 솔루션이 있습니까?
인구 조사 데이터로 작업하고 있으며 각각 600ish 열 / 변수가있는 여러 CSV 파일을 다운로드했습니다. 쿼리 가능한 데이터베이스에 모두 저장하고 싶지만 지금까지 시도한 모든 내용 (MS Access, Arc geodatabase 테이블)은 테이블을 256 개의 열로 자릅니다. DBA가 아닌 사람이 액세스 할 수있는 큰 테이블을 처리하기위한 솔루션이 있습니까?
답변:
PostgreSQL은 250에서 1600 사이의 "열 유형에 따라"열 제한이 있으며 PostGIS 확장을 사용하여 공간 데이터 및 쿼리를 지원합니다. 그래서 나는 두 가지 일을하는 경향이 있습니다.
먼저 열이 자유 텍스트가 아닌 범주를 나타내는 경우 해당 범주로 별도의 테이블을 만들고 범주 테이블을 참조하여 열을 정수 ID 및 외래 키 제약 조건으로 바꿉니다.
둘째, 큰 테이블을 논리적 인 방식으로 둘 이상으로 분할하여 세 번째 정규형을 나누고 이들 사이에 일대일 관계를 설정하십시오. 이것은 아마도 가장 효율적이지는 않지만 일부 데이터가 거의 필요하지 않으면 원하는 테이블에 쿼리가있을 수 있습니다.
완전히 다른 또 다른 대안은 MongoDB, CouchDB 등과 같은 "NOSQL"데이터베이스를 사용하는 것입니다. "행"크기에 대한 고정 된 제한은 없으며 레코드에 데이터가 없으면 공간을 차지할 필요가 없습니다.
공간 지원은 이러한 유형의 큰 테이블 데이터베이스에 적합하지 않지만 MongoDB는 2D 공간 쿼리 및 데이터를 지원하며 CouchDB는 비슷한 기능을 가진 것으로 보입니다.
최근에 2172 개의 열이 포함 된 Statistics Canada 인구 조사 프로필 CSV 파일과 동일한 문제를 처리했습니다. ArcGIS에 액세스 할 수 있으면 CSV를 ESRI 파일 지오 데이터베이스 (FGDB)로 가져올 수 있습니다. ESRI에 따르면 FGDB 형식은 피쳐 클래스 또는 테이블에서 65,534 개의 필드를 처리 할 수 있습니다 .
필자의 경우 2172 열 너비 CSV 파일을 아무런 문제없이 FGDB 테이블로 가져올 수있었습니다.
전체 테이블을 FGDB로 가져 오면 원하는 방식으로 (예 : 논리적 또는 db 제한에 따라) 분할하여 고유 한 id 열을 유지하여 다음과 같이 다시 결합 할 수 있습니다. 필요합니다.
짧은 :
속성이 많거나 각 객체에 가변 기여 유형이있는 데이터에 대한 내 옵션은 KEY / VALUE 데이터 모델을 사용하는 것입니다 .SQL에서 구현하고 매우 잘 작동합니다 (postgresql + postgis를 권장합니다).
설명 :
1) 기능에 대한 하나의 테이블이 있습니다. 이 테이블에는 각 포인트에 대한 ID와 GEOMETRY가 있습니다.
2) 키 / 값 쌍인 '속성'에 대한 테이블이 하나 더 있습니다. 이 테이블에는 열 ID, POINT_ID (FK), KEY (varchar), VALUE (varchar)가 있습니다.
이제 각 포인트는 다음과 같이 사실상 무한한 속성을 저장할 수 있습니다.
ID POINT_ID KEY VALUE
1 1 type burger shop
2 1 name SuperBurger
3 1 address 123, a ST.
OpenStreetMaps는 이와 같이 작동하며 잘 작동합니다 ( 여기 및 여기 참조) .
데이터를 가져 오기 위해 파이썬 스크립트를 제안했습니다.