2010-12-10 3 views
3

데이터가 시스템에 들어올 때 점진적으로 사실 및 차원 테이블을로드하는 방법을 파악하려고합니다. 창고의 증분 하중; 차원 테이블 업데이트

는 간단한 방법보다 더 있습니까 : 어디 dim_table.value = '희미한 값'dim_table에서

  • dim_id = ID를 선택;
  • 0 행 개수 == 경우 - 전 10 치수를 가지고있는 경우>이 dim_table 삽입 ... 사실로
  • 인서트 (계산 희미한) 값 (dim_id, 23,131)을

로딩 오히려 번거로운 얻는다

+0

갑자기 '23131'은 무엇입니까? :) – Konerak

답변

0

증분이 필요합니까? UUID를 사용할 수 없습니까?

왜 dim_table이 필요한지 알 수 없습니다.

당신이 스타 스키마를 수행하는 경우, 이것은 당신이 테이블이 당신의 크기에 대한 UUID를 생성하여 치수를 채울 때

Fact_table 
---------- 
time_id   character(36) 
geographic_id character(36) 
measure   whatyouwant 

Dim Time 
-------- 
time_id character(36) (That matches the time_id inside your fact table) 
... 
... 

Dim Geogrphic 
------------- 
geographic_id character(36) (that matches the geographic_id inside your fact_Table) 
.... 
.... 

를 작동 할 수있는 방법입니다. 사실 테이블을 필렛 할 때 차원 테이블을 조회하여이 값과 관련된 uuid를 가져올 수 있습니다.

편집 : 나는, 치수는 사실 전에로드되는 표준 스타 스키마에서 당신에게 http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

+0

차원 테이블과 팩트 테이블은 모두 시스템 입력에 따라 동시에 채워집니다. 따라서 데이터 항목을 받으면 아직 차원 테이블에 행이 있는지 알 수 없습니다. – jrydberg

+0

그래도 하나는 다른 하나보다 먼저 채워야합니다. 또는 fact_table에 대한 삽입이 사실 테이블에 삽입 된 후 희미한 테이블에 삽입 된 직후 일 수 있다는 것을 의미합니까? 그런 경우가 아니라면 먼저 차원을 채워야합니다. 질문 : 당신은 그 차원을 비행 중에 정의하고 있습니까? 아니면 가지고있을 차원을 알고 있습니까? – Spredzy

+0

트랜잭션 로그를 처리하고 "고객 IP 주소"가 하나의 차원입니다. 그리고 그것은 비행 중에 정의 될 것입니다, 그렇습니다. – jrydberg

0

도움이 될 것 같아요. 따라서 일괄 적으로 실행되는 ETL 프로세스가있는 경우 가장 간단한 해결책은 일괄 처리를 더 자주 실행하는 것입니다. 실시간 DW 로딩이 필요하다면, 치수가 먼저로드되도록 사실을 어떻게 든 연기해야합니다.

선반 솔루션의 경우 스트림 이벤트 처리를 살펴볼 수 있습니다. 거기에 몇 가지 상용 도구가 있지만 EsperTech는 오픈 소스입니다. 시스템은 지속적으로 실행되는 ETL 변환으로 설정 될 수 있습니다. 실행을 계속하는 주전자 (Talend, SSIS, ..) 변형을 생각해보십시오.