256 개 이상의 변수가있는 테이블을 어떻게 처리 할 수 ​​있습니까?


10

인구 조사 데이터로 작업하고 있으며 각각 600ish 열 / 변수가있는 여러 CSV 파일을 다운로드했습니다. 쿼리 가능한 데이터베이스에 모두 저장하고 싶지만 지금까지 시도한 모든 내용 (MS Access, Arc geodatabase 테이블)은 테이블을 256 개의 열로 자릅니다. DBA가 아닌 사람이 액세스 할 수있는 큰 테이블을 처리하기위한 솔루션이 있습니까?


2
DB 정규화가 어느 정도 있더라도이 거대한 테이블은 인구 조사 단위 (블록 아마도?) UID와 관련하여 여러 개의 작은 테이블로 분리되어야한다고 생각합니다.
Roy

답변:


7

PostgreSQL은 250에서 1600 사이의 "열 유형에 따라"열 제한이 있으며 PostGIS 확장을 사용하여 공간 데이터 및 쿼리를 지원합니다. 그래서 나는 두 가지 일을하는 경향이 있습니다.

먼저 열이 자유 텍스트가 아닌 범주를 나타내는 경우 해당 범주로 별도의 테이블을 만들고 범주 테이블을 참조하여 열을 정수 ID 및 외래 키 제약 조건으로 바꿉니다.

둘째, 큰 테이블을 논리적 인 방식으로 둘 이상으로 분할하여 세 번째 정규형을 나누고 이들 사이에 일대일 관계를 설정하십시오. 이것은 아마도 가장 효율적이지는 않지만 일부 데이터가 거의 필요하지 않으면 원하는 테이블에 쿼리가있을 수 있습니다.

완전히 다른 또 다른 대안은 MongoDB, CouchDB 등과 같은 "NOSQL"데이터베이스를 사용하는 것입니다. "행"크기에 대한 고정 된 제한은 없으며 레코드에 데이터가 없으면 공간을 차지할 필요가 없습니다.

공간 지원은 이러한 유형의 큰 테이블 데이터베이스에 적합하지 않지만 MongoDB는 2D 공간 쿼리 및 데이터를 지원하며 CouchDB는 비슷한 기능을 가진 것으로 보입니다.


4
+1 센서스 데이터에는 관련 필드 그룹이 있고 특정 분석에 대해 종종 소수의 그룹 만 필요하기 때문에 결합 솔루션 (3 항)은 실제로 매우 효율적일 수 있습니다. 이러한 방식으로 수천 개의 필드 (과장하지 않습니다 : 일반적입니다)는 수십 개의 테이블에서 논리적으로 분리 될 수 있으며 특정 맵 또는 분석을 위해 소수의 테이블 만 액세스하면됩니다.
whuber

@MerseyViking, 데이터를 테이블을 조작하는 프로그램으로 가져올 수없는 경우 어떻게 그 (@scoball)가 테이블을 분할하거나 다른 언급 된 작업을 수행 할 수 있습니까? 데이터는 CSV입니다.
Pablo

2
@Pablo, MerseyViking에게 불공평하다고 생각합니다. 테이블을 가져 오기위한 스크립트를 작성하도록 허용 된 경우 (기본적으로 솔루션을 구현하기 위해 강요된) 스크립트도 작성할 수 있으며 어려움이 없습니다. 완전히 일반적이고 융통성있는 것을 작성합니다. (매우 큰 인구 조사 데이터베이스를 위해이를 수행했기 때문에 경험을 통해 이것을 알고 있습니다.) 또한 그는 256 개의 필드 제한을 해결하는 많은 대안을 제안합니다.
whuber

"열은 자유 텍스트가 아닌 범주를 나타냅니다."해당 열을 수동으로 매핑해야합니다.
Pablo

2
@Pablo 부적절한 소프트웨어를 사용하는 경우에만 :-). 단락 2-3의 워크 플로는 예를 들어 거의 모든 최신 통계 프로그램을 사용하여 몇 가지 명령으로 수행 할 수 있습니다. (물론 나는 데이터베이스 대신에 그러한 프로그램을 사용하는 것을 옹호하는 것이 아니라 적절한 도구 모음 을 사용하면이 답변의 모든 것이 쉽고 효율적으로 달성 될 수 있다는 점을 지적하고 있다.)
whuber

7

최근에 2172 개의 열이 포함 된 Statistics Canada 인구 조사 프로필 CSV 파일과 동일한 문제를 처리했습니다. ArcGIS에 액세스 할 수 있으면 CSV를 ESRI 파일 지오 데이터베이스 (FGDB)로 가져올 수 있습니다. ESRI에 따르면 FGDB 형식은 피쳐 클래스 또는 테이블에서 65,534 개의 필드를 처리 할 수 ​​있습니다 .

필자의 경우 2172 열 너비 CSV 파일을 아무런 문제없이 FGDB 테이블로 가져올 수있었습니다.

전체 테이블을 FGDB로 가져 오면 원하는 방식으로 (예 : 논리적 또는 db 제한에 따라) 분할하여 고유 한 id 열을 유지하여 다음과 같이 다시 결합 할 수 있습니다. 필요합니다.


1
흥미 롭습니다! CSV에서 파일 지오 데이터베이스로 가져 오려고했습니다. 설정 할 때 가져올 변수 목록을 보았고 256 변수 다음에 나열하지 않았으므로 계속 진행하지 않았습니다. 다시 한번 살펴 보겠습니다.
scoball


파일 지오 데이터베이스는 제한이 높으므로 가져 오기에서 문제가 발생할 수 있습니다.
nicksan

2

짧은 :
속성이 많거나 각 객체에 가변 기여 유형이있는 데이터에 대한 내 옵션은 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는 이와 같이 작동하며 잘 작동합니다 ( 여기여기 참조) .

데이터를 가져 오기 위해 파이썬 스크립트를 제안했습니다.


이것을 종종 "긴"형태의 데이터라고하며 알고 있어야합니다. 융통성있는 저장에는 적합하지만 모든 종류의 다변량 분석 (두 개 이상의 속성을 비교하는 모든 분석)에는 쓸모가 없습니다.
whuber

@ whuber, 다변량 분석에는 쓸모가 없지만 실제로 데이터를 준비해야하며 특히 테이블로 전송해야하기 때문에 매우 구조화 된 소프트웨어 또는 우수한 프로그래밍 기술이 필요합니다. 여기에서는 처리하기 전에 데이터의 발췌를 테이블에 넣어야 할 때 토양 데이터 (ph, al, clay 등)를 처리하기 위해 postgis + django (python web framework)의 조합을 사용합니다. 동일한 구조가 다른 임의의 부정확 한 데이터를 처리하기 때문에이 모델이 선택되었습니다.
Pablo

충분히 공평 : 나는 "있는 그대로"쓸모가 없었다고 말했을 것입니다. 모든 정보가 그대로 유지되면 언제든지 원하는 형식으로 데이터를 처리 할 수 ​​있습니다. 키 / 값 접근 방식에 비해 @MerseyViking의 방법을 사용하면 처리가 비교적 쉽습니다. 또한 테이블이 실제로 커지면 전체 크기에 대해 걱정하기 시작합니다. 키 / 값 저장의 중복성은 너무 커서 매우 큰 데이터 세트의 분석에 거의 사용되지 않습니다 (순전히 저장을위한 사용 빈도에 대해서는 말할 수 없습니다).
whuber

그의 솔루션에 동의하지 않습니다. 데이터베이스에서 데이터를 열 수없는 경우 테이블을 분할하거나 조작하는 것이 쉽지 않기 때문에 불가능하지는 않습니다. 사용자는 스크립을 통해 데이터베이스로 직접 데이터를 보내야하며 키 / 값 모델을 사용하면 열을 매핑하거나 속성을 분류 할 필요없이 모든 데이터에 동일한 스크립을 사용할 수 있습니다.
Pablo

귀하의 솔루션은 귀하의 입학 허가에 따라 "좋은 프로그래밍 기술"이 필요한 프로그래밍 방식으로 복잡합니다. PostgreSQL과 같은 RDBMS에 가장 효율적인 형식으로 데이터를 유지하는 것을 옹호했습니다. 게다가 브렌트의 답변에 256 열 제한이 가짜임을 나타 내기 때문에 논쟁의 여지가있는 것으로 보입니다.
MerseyViking
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.