당사의 제품은 당사 데이터베이스에서 추출한 것으로 파일 크기가 300GB 이상 될 수 있습니다. 이를 위해 여러 대형 테이블 (경우에 따라 1TB에 가까운 테이블)을 결합합니다. 우리는 데이터 기간을 모으지 않습니다. 순수 추출물입니다. GreenPlum은 이러한 종류의 큰 데이터 세트를 어떻게 처리합니까? (조인 키는 3+ 열 키이며 모든 테이블이 동일한 키를 가지고 있지는 않습니다. 일반적인 키는 첫 번째 키이고 데이터가있을 것입니다. 데이터 그 자체가 균형을 이루지 않기 때문에 많은 비뚤어 짐).GreenPlum은 여러 개의 큰 조인과 동시 작업을 어떻게 처리합니까?
0
A
답변
0
gpfdist를 사용하고 데이터를 병렬로 쓸 수 있으므로 이러한 유형의 큰 데이터 추출에는 쓰기 가능한 외부 테이블을 사용해야합니다. 그것은 매우 빠를 것입니다.
https://gpdb.docs.pivotal.io/510/ref_guide/sql_commands/CREATE_EXTERNAL_TABLE.html
또한, 사용 사례 정말 왜곡 표시되지 않습니다. skew는 gender_code와 같이 열악한 열 선택으로 데이터를 저장하거나 몇 개의 세그먼트에만 데이터가있는 열로 필터링하는 skew를 처리합니다.
0
일반적으로 Greenplum 데이터베이스는 이러한 종류의로드를 잘 처리합니다. 쿼리는 세그먼트에서 병렬로 실행됩니다.
병목 현상은 데이터베이스의 최종 내보내기 일 가능성이 높습니다. SQL (또는 COPY)을 사용하면 모든 것이 마스터를 통해 클라이언트로 전송되어야합니다. 시간이 걸리고 천천히 움직입니다.
Jon이 지적했듯이 외부 테이블을 사용하여 쿼리에서 나오는대로 데이터를 기록하는 것이 좋습니다. 또한 가능한 경우 쿼리에서 정렬 작업을 수행하지 마십시오. 외부 테이블 파일에 정렬되지 않은 데이터가 도착하기 때문에 이는 불필요합니다.
내가 이해하지 못하는 것은 4 개의 노드를 가지고 있다고 가정하고 2 개의 큰 테이블이 있고 똑같은 키가 아니라 두 개의 테이블 데이터가 4 개의 노드로 나누어 져 있고 테이블이 비슷하다는 것입니다 크기는 모두 500GB라고 가정 해 봅시다. GreenPlum은 모든 데이터를 단일 노드로 전송하지 않고 어떻게 이러한 테이블을 조인합니까? 또는 조인을 효율적으로 수행하는 방법은 무엇입니까? – Gokhan
데이터가 균등하게 분배되지 않으면 하나 또는 몇 개의 세그먼트가 대부분의 작업을 수행해야하므로 성능이 저하됩니다. 귀하의 예제에서 조인의 경우 조인트를 수행하기 위해 한 테이블의 데이터를 다른 세그먼트로 보내야합니다. 이것은 상호 연결을 통해 병렬로 발생합니다 - 두 테이블이 동일한 분배 키를 갖는 경우를 제외하고 조인은 국지적으로 발생합니다. –