2014-10-08 4 views
0

Talend를 사용하여 데이터웨어 하우징 응용 프로그램을 만들려고 할 때 다음과 같은 시나리오가 발생합니다.일대 다 관계를 평평하게 만드는 방법

우리는 마스터와 이벤트 테이블 간의 일대 다 관계가있다

표 마스터

ID | CUST_NAME | CUST_EMAIL 
------------------------------------ 
1 | FOO  | [email protected] 

이벤트 표

ID | CUST_ID | EVENT_NAME | EVENT_DATE  
--------------------------------------- 
1 | 1  | ACC_APPLIED | 2014-01-01 
2 | 1  | ACC_OPENED | 2014-01-02 
3 | 1  | ACC_CLOSED | 2014-01-02 

과 같이 두 개의 테이블 테이블을 가지고있다. 제한된 수의 이벤트 이름이 주어 지므로이 구조를 비정규 화하는 것이

ID | CUST_NAME | CUST_EMAIL   | ACC_APP_DATE_ID | ACC_OPEN_DATE_ID |ACC_CLOSE_DATE_ID  
----------------------------------------------------------------------------------------- 
1 | FOO  | [email protected] | 20140101  | 20140102   | 20140103 

DATE_ID 열은 시간 차원 테이블의 항목을 참조합니다.

첫 번째 질문 : 좋은 생각입니까? 이 계획의 다른 대안은 무엇입니까?

두 번째 질문 : Talend Open Studio를 사용하여 어떻게 구현합니까? 나는 각각의 이벤트 이름에 대한 데이터를 tMap 구성 요소를 사용하여 cust_id와 함께 자신의 임시 테이블로 이동시킨 후 다른 tMap을 사용하여 이들을 함께 연결하는 방법을 알아 냈습니다. 탤런트에서 이것을 할 수있는 또 다른 방법이 있습니까?

답변

1

Talend에서이 작업을 수행하려면 먼저 각 계정에 대해 적용, 열기 및 닫기 순서로 데이터를 정렬 한 다음 해당 데이터에 대해 단일 구분 필드가있는 단일 행으로 역 정규화해야합니다 tDenormalizeRows 구성 요소를 사용하는 날짜.

이렇게하면 tExtractDelimitedFields를 사용하여 단일 날짜 필드를 분할해야합니다.

+0

고마워요. 그것은 또한 작동 할 것입니다. tPivotToColumnsDelimited 구성 요소를 사용하는 것은 어떻습니까? – Bazooka

+0

tPivotToColumnsDelimited는 구분 된 파일을 출력하므로 사용자가 원하는대로 적합하지 않습니다. 아마 임시 파일을 출력 한 다음 다시 읽어 들일 수는 있지만 유스 케이스에서는 지저분하고 불필요합니다. – ydaetskcoR

+0

동의합니다. 감사. – Bazooka

1

첫 번째 질문에 대해서는 확실히 좋은 생각입니다. 같은 사람이 신청할 가능성이 있습니다 (예 : )이 모든 정보를 기록에 남겨두기를 원합니다 (UPDATE가 도움이되지 않습니다).

+0

감사합니다, 같은 시나리오를 통해 공기를 취소 할 수 있도록 완벽하게 맞습니다. 그러나 실제 구조에는 각 계정 보유자를위한 자연스러운 키가 포함되어 있으므로 문제가되지는 않습니다. – Bazooka