사실 테이블을 분할하는 일반적인 방법 일 것입니다. 원본에 Sales_TransactionDate 열이 있으므로 분할 attribbute로 분명히 선택됩니다.
데이터 양과 생성하려는 파티션 수에 따라 년, 월, 일 또는 그 사이의 모든 항목으로 분할 할 수 있습니다.
아이디어는 전체 큐브를 한 번만 처리하는 것입니다. 그런 다음 (예를 들어) 밤마다, 현재 (예 :) 월의 파티션 만 다시 처리합니다. 이는 이전 데이터 (예 : 마지막 달이 끝날 때까지의 데이터) 이 소스 시스템에서을 절대 변경하지 않는 경우에만 작동합니다. 지난 달 파티션이 더 이상 처리되지 않기 때문에 변경된 사항은 변경 사항을 놓치게됩니다.
이렇게 점진적 처리에는 중요한 점이 있습니다. 소스 시스템의 데이터가 처음으로 변경된 후 얼마 동안 변경 될 수 있는지 (큐브와 관련된 변경 사항 만 있습니다. 큐브가 사용하지 않는 일부 열이 변경되지 않아도 상관 없습니다) , 그리고 어느 단계에서 변함없는 상태로 자리 잡는다.
Type2 느리게 변경되는 특성을 사용하는 방법 (원본 시스템에 행이 마지막으로 업데이트 된시기를 나타내는 방법 (예 : LastUpdated datetime)과 관련된 ETL 질문입니다. 기둥).
(편집 - 아래에 의견을 따라) 당신은 단지 가장 최근의 파티션을 처리하여 가능한 모든 변경 사항을 캡처 보장하고 있도록 파티션 크기를 조정해야
합니다. 예를 들어 행이 Transaction Date (또는 다른 날짜로 파티션을 나누는 데 사용하는 날짜) 이후 6 개월까지 변경 될 수있는 경우 변경 사항을 놓치지 않도록 마지막 6 개월의 데이터를 처리해야합니다.
그러나이 제약은 가장 최근 파티션의 크기에만 영향을줍니다. 이전 파티션의 크기는 원하는대로 지정할 수 있습니다. 행을 "변경됨"으로 표시하는 메커니즘이 소스 시스템에있는 경우 가장 최근의 파티션에서 처리량을 줄일 수 있습니다. (한 예로 "LastUpdated"열이 있습니다.이 열은 행이 업데이트 될 때 항상 현재 날짜/시간으로 설정되고 또 다른 예는 SQL CDC입니다.
안녕 SebTHU, 증분 olap 큐브에 대한 또 다른 제안을 해주실 수 있습니까? –
하나의 예가 필요합니다. –
@SebTHU - 명확히하기 위해 LastUpdated는 정적이 된 후에 사용해야합니다. 큐브가 처리 된 후 LastUpdated가 변경되면 레코드가 두 번 계산되지 않도록 이전 파티션을 새 파티션으로 다시 처리해야합니다. –