2017-03-03 2 views
1

Amazon Redshift에서 데이터웨어 하우스를 구현하고 있으며 Redshift에서 스키마를 올바르게 디자인하는 방법에 대한 제안을 원합니다.Amazon Redshift 스키마 디자인

저는 Redshift를 처음 사용했습니다. 과거에 "전통적인"데이터웨어 하우스를 사용하여 작업하면서, "소스", "스테이지", "최종"등과 같은 스키마를 작성하여 데이터가 포함 된 단계에 따라 모든 데이터베이스 오브젝트를 그룹화하는 데 익숙했습니다.

기본적으로 Redshift의 데이터베이스에는 PUBLIC이라는 단일 스키마가 있습니다. Redshift와 함께 일한 사람들에게 제 질문은 위에서 설명한 접근 방법을 여기에 적용합니까? 그렇지 않다면 나는 몇 가지 제안을 좋아할 것입니다.

감사합니다.

답변

4

, 나는 확신을 가지고 다음과 같은 점을 주장 할 수 있습니다

  1. 여러 스키마 : 여러 스키마를 작성하고 그에 따라 테이블을 만들어야합니다. 규모를 조정할 때 테이블이 정확히 어디에 있어야하는지 정확하게 지적 할 수 있습니다. 예를 들어, production, aggregatesrough이라는 3 개의 스키마가 있다고 가정 해 보겠습니다. 이제 production 테이블에는 변경 될 예정이없는 테이블 (주로 OLTP 데이터)이 포함됩니다 (예 : user, order, transactions 테이블). 표 aggregates은 원시 테이블에 대해 집계 된 데이터 (예 : number of orders placed per user per day per category)를 갖습니다. 마지막으로 rough에는 비즈니스 로직을 보유하지는 않지만 일부 임시 작업에 필요한 테이블이 포함됩니다. 영화의 장르를 확인하여 Excel에서 나와 공유되는 1 명의 사용자 목록을 확인하십시오. 파일. rough 스키마에 테이블을 만들고 작업을 수행하고 테이블을 삭제하십시오. 이제 테이블이 원시 테이블인지 집계 테이블인지 아니면 임시 테이블인지에 따라 테이블을 찾을 수있는 위치를 매우 명확하게 알 수 있습니다.

  2. 공개 스키마 : 존재하지 않습니다. 스키마 이름이 선행되지 않은 테이블은 여기에 생성됩니다. 중요한 데이터를 저장할 때 아무런 문제가 없습니다.

  3. 크로스 스키마 조인 : 여기에 멈추지 않습니다. 필요한만큼 스키마에서 많은 테이블을 조인 할 수 있습니다. 사실 모든 정보를 단일 테이블에 보관하지 않고 나중에 차원 테이블을 만들고 PK에 조인하는 것이 바람직합니다.

스키마 및 기본 테이블 구조를 설계하는 데 약간의 시간을 투자하십시오.확장하면 액세스 제어 측면에서 더 쉽게 분류 할 수 있습니다. 내가 명백한 점을 놓친다면 알려주지.

2

Redshift 클러스터에는 여러 개의 데이터베이스가있을 수 있지만 하나는 붙어 있습니다. 스키마 (본질적으로 네임 스페이스)가 일을 나눌 수있는 좋은 방법이라는 것이 맞습니다. 데이터베이스가 아닌 스키마를 통해 쿼리 할 수 ​​있습니다.

퍼블릭 스키마를 사용하여 특정 권한을 관리하는 것은 어렵습니다. 예를 들어 테이블을 만들 수 없도록하는 것보다 공개 액세스를 거부하는 것이 더 쉽습니다.

시간이 있다면 가장 좋은 결과를 얻으려면 시스템 권한에 대해 알아보십시오. create groups that have access to schemas or tables을 원하고 그룹에서 사용자를 추가/제거하여 사용자가 할 수있는 일을 제어 할 수 있습니다. 그렇게하면 쉽게 관리 할 수 ​​있습니다. 적색 편이 작업에 내 경험

1

다른 응답 외에 다음은 스키마 성능을 향상시키기위한 몇 가지 제안 사항입니다.

첫째 : COPY 명령

를 사용하여 자동 압축 인코딩은 COPY 명령을 사용하여 아마존 적색 편이 성능을 향상시킬 수 있습니다. Redshift 데이터베이스에 데이터를 가져옵니다. COPY 명령은 충분히 똑똑합니다. 업로드하는 데이터에 가장 적합한 인코딩 설정을 자동으로 선택합니다. 그것에 대해 생각할 필요가 없습니다. 그러나 첫 번째 데이터를 빈 테이블에 업로드하는 경우에만이를 수행합니다.

따라서 Redshift가 가장 좋은 방법으로 열 인코딩을 설정하기 위해 평가할 수있는 데이터를 처음 업로드하는 동안 중요한 데이터 세트를 사용해야합니다. 몇 줄의 테스트 데이터를 업로드하면 Redshift는 실제 작업 부하를 처리하기 위해 압축을 최적화하는 것이 가장 좋은 방법인지 혼동하게됩니다.

둘째, 사용 제일 배포 스타일과 키

배포 스타일은 데이터 노드에 분산하는 방법을 결정합니다. 테이블 수준에서 배포 스타일을 적용하면 Redshift가 테이블과 키를 배포 할 방법을 알 수 있습니다. 따라서 Redshift를 사용하여 쿼리 성능을 높이려면 배포 스타일을 지정하는 것이 중요합니다. 선택한 스타일이 데이터 저장 및 클러스터 요구 사항에 영향을 미칠 수 있습니다. 또한 COPY 명령을 실행하는 데 걸리는 시간에 영향을줍니다.

더 작은 치수를 가진 모든 테이블에 배포 스타일을 설정하는 것이 좋습니다. 큰 차원의 경우 차원과 연관된 사실을 조인 열에 분산하십시오. 두 번째 큰 차원을 최적화하려면 스토리지 적중을 가져 와서 ALL을 배포하십시오. 사실에 차원 열을 디자인 할 수도 있습니다.

셋째 :

지정한 경우 적색 편이 데이터베이스가 정렬 키 컬럼의 배열로 테이블에 데이터를 유지 키 최고의 정렬을 사용합니다. 각 파티션에서 정렬되기 때문에; 각 클러스터 노드는 사전 정의 된 순서로 파티션을 유지합니다. Redshift 스키마를 디자인하는 동안 예산에 미치는 영향도 고려하십시오. 저장된 데이터 양과 노드 수에 따라 Redshift는 priced입니다.

정렬 키는 Amazon Redshift 성능을 크게 최적화합니다. 당신은 여러면에서 그것을 할 수 있습니다. 먼저 데이터 필터링을 사용하십시오. sort-key-column에 where-clause 필터가 있으면 전체 데이터 블록을 건너 뜁니다. Redshift가 데이터를 블록으로 저장하기 때문입니다. 각 블록 헤더는 최소 W 최대 정렬 키 값을 기록합니다. 해당 범위를 벗어나서 필터링하면 전체 블록을 건너 뛸 수 있습니다.

또는 조인트 키로 정렬 된 두 개의 테이블을 결합 할 때 데이터가 일치하는 순서로 읽혀집니다. 또한 별도의 정렬 단계없이 병합 조인을 수행 할 수 있습니다. 큰 팩트 테이블에 큰 차원을 결합하는 것은 해시 테이블에 맞지 않으므로이 방법으로 쉽게 할 수 있습니다.

관련 문제