2009-05-15 6 views
5

일반적인 엔티티 관계 OLTP 데이터베이스 모델에서 킴볼 스타 스키마 데이터웨어 하우스/마트 모델로 데이터를로드하는 데 일반적으로 사용되는 방법은 무엇입니까?OLTP 관계형 데이터베이스를 데이터웨어 하우징 모델로 변환

  • 변환을 수행하고웨어 하우스에로드하려면 준비 영역을 사용합니까?
  • 웨어 하우스와 OLTP 데이터베이스간에 데이터를 어떻게 링크합니까?
  • 어디에서/어떻게 sprocs, dts/ssis 패키지 또는 응용 프로그램 코드에서 데이터베이스로 변환 프로세스를 관리합니까?

답변

8

개인적으로, 나는 다음과 같이 작동하는 경향이 :

  1. 디자인 데이터웨어 하우스를 먼저. 특히 준비 테이블을 무시하고 DW의 일부로 필요한 테이블을 디자인하십시오.
  2. SSIS를 사용하여 ETL을 디자인하지만 관련 데이터베이스에서 SSIS 호출 저장 프로 시저를 사용하는 경우가 있습니다.
  3. ETL의 일부로 스테이징 테이블이 필요한 경우, 그래도 정리가 완료되도록하십시오. 단일 단계의 ETL 단계의 일부로 만 사용되는 스테이징 테이블은 해당 단계가 완료된 후에 성공 여부에 따라 잘려야합니다.
  4. 적어도 SSIS 패키지는 스테이징 테이블로 데이터를 가져 오는 데 OLTP 데이터베이스를 참조해야합니다. 상황에 따라 OLTP 테이블을 직접 데이터웨어 하우스로 처리 할 수 ​​있습니다. 이러한 모든 쿼리는 WITH (NOLOCK)로 수행됩니다.
  5. 문서, 문서, 문서. 각 패키지가 사용하는 입력과 출력이 어디에서 사용되는지 명확히하십시오. 입력이 선택되는 기준을 확인하십시오 (마지막 성공 이후 지난 24 시간? 새로운 신원 값? 모든 행)

이것은 잘 수행되었지만 아직 완료하지 못했다고 인정합니다. 이 프로젝트의 많은 것, 또는 어떤 큰 것들도 아닙니다.

+0

@ 존 - 데이터웨어 하우스 모델에 Kimble "사실 및 차원 별 스키마"디자인을 사용 했습니까? –

+0

나는 그렇게 생각한다. 나는 사람들이 데이터웨어 하우스에서 그의 이름을 알고리즘에서 "크 누스 (Knuth)"를 호출하는 것과 거의 비슷하게 불렀음에도 불구하고이 "킴블"녀석을 읽은 적이 없습니다. 그러나 다시 한번, 나는 처음 Knuth 책을 완성하지 못하고 전체 세트를 팔아 치우지 못했습니다. 지금 작업하고있는 데이터 마트는 치수가있는 몇 가지 치수가 있기 때문에 눈송이가 더 많습니다. 우리의 상황은 고객과 세일즈맨 모두 차원을 갖는 것과 유사하며 둘 다 지리를 가지고 있습니다. –

+0

죄송합니다, 나는 Kimball이 아니라 Kimball을 의미했습니다. :) –

1

존 손더스의 프로세스 설명은 좋은 것입니다.

SQL 서버에 Datawarehouse 프로젝트를 구현하려는 경우 우수한 텍스트 "The Microsoft Data Warehouse Toolkit"으로 전체 프로젝트를 제공하는 데 필요한 모든 정보를 찾을 수 있습니다.

는 Funilly만큼, 저자 중 하나는 내가 현재 작은/중간 크기 Dataware에 집에서 일하고 있어요

+0

죄송합니다, Kimble이 아니라 Kimball을 의미합니다. 저는 동료에게서 책을 빌려 왔지만 데이터 변환을 수행하는 데 사용되는 일반적인 전략과 도구에 대해 의견을 나누고 싶습니다. –

+0

SSIS가 방법입니다. 수행해야 할 작업의 대부분은 이미 기존 패키지 구성 요소에 의해 처리되었으며 병렬 처리 기능으로 인해 처리량 측면에서 빠르게 움직일 수 있습니다. –

2

:-) 랄프 킴볼이다. 우리는 킴볼이 제시 ​​한 몇 가지 개념, 즉 사실과 차원 표가있는 별표를 채택하고 있습니다. 팩트는 사실 만 차원에 결합합니다 (실제로 사실이 아니거나 차원으로 차원이 아닙니다 - 이것이 선택의 방식이라고 말하는 것이 아니라 우리의 선택입니다). 그래서 모든 차원 조인을 사실 테이블로 변환합니다.

우리는 SSIS를 사용하여 프로덕션 DB -> 원본 DB -> 준비 DB ->보고 DB에서 데이터를 이동합니다 (DB를 덜 사용했을 수도 있지만 그 방법은 추락했습니다).

SSIS는 데이터 흐름을 매우 논리적으로 구조화 할 수 있으므로 정말 좋습니다. 우리는 SSIS 구성 요소와 저장된 procs의 조합을 사용합니다. SSIS의 한 가지 좋은 기능은 원본/대상 데이터 흐름간에 변환으로 SQL 명령을 제공하는 기능입니다. 이것은 우리가 원할 경우 모든 행에 저장된 procs를 호출 할 수 있음을 의미합니다. 유용 할 수 있습니다 (조금 느리지 만).

우리는 테이블의 모든 변경 사항을 감사 할 수있는 변경 데이터 캡처 (CDC)라는 새로운 SQL Server 2008 기능 (테이블에서 볼 열을 지정할 수 있음)을 사용하므로 우리는 프로덕션 DB에서이 정보를 사용하여 변경된 사항을 알 수 있으므로 처리를 위해 소스 DB로 레코드를 이동할 수 있습니다.

0

Data Vault Modeling을 살펴볼 수 있습니다. 그것은 속성을 변경하는 것과 같은 일부 외로운 용어 문제를 해결한다고 주장합니다.

2

나는 높은 평가 대답에 동의하지만, 나는 다음을 추가 거라고 생각했다 : 창고에

* Do you use a staging area to perform the transformation and then 

부하를?

스테이징이 필요한지 여부는 변환 유형에 따라 다릅니다. 스테이징은 ETL을보다 관리하기 쉬운 단위로 나눌 수있는 이점을 제공하지만웨어 하우스에 영향을 미치지 않고 데이터에서 조작을 수행 할 수있는 작업 영역을 제공합니다. 팩트 레코드를로드 할 때 조회로 사용하기 위해 OLTP 시스템의 키와 최신 dim 레코드의 키를 저장하는 준비 영역에 (최소한) 일부 차원 조회를 수행하는 데 도움이 될 수 있습니다. 변환은 ETL 프로세스 자체에서 발생하지만 진행 과정에서 도움이 될 수있는 준비 작업이 필요할 수도 있고 아닐 수도 있습니다.

* How do you link data between the warehouse and the OLTP database? 

다시 OLTP 시스템을 기준으로 데이터웨어 하우스에 (가능한 경우 또는 실제 기본 키) 비즈니스 키를 로딩하는 데 유용

. 또한 DW 프로세스에서 감사를 수행하면로드 한로드 프로세스를 기록하여 각 비트의 계보를 기록해야합니다. 응용 프로그램 코드에서 sprocs가, DTS/SSIS 패키지, 또는 SQL과 같은

* Where/How do you manage the transformation process - in the 

데이터베이스?

이것은 일반적으로 SSIS 패키지에 있지만 대개 소스 쿼리에서 변환하는 것이 더 효과적입니다. 유감스럽게도 이는 소스 쿼리를 이해하기가 복잡하여 유지 관리하기 때문에 성능에 문제가 없다면 SSIS 코드를 변환하는 것이 가장 좋습니다. 이렇게하면 다른 테이블간에 소스 쿼리에 더 많은 조인을 만들 수 있으므로 준비 영역을 갖는 또 다른 이유가됩니다.