6. 데이터 변환하기
파이프라인의 목적 : 비즈니스 통찰력 또는 분석을 생성하는 것.
-> 데이터가 데이터 모델로 추가 변환됨
데이터 모델
- 데이터 분석을 위해 이해되고 최적화된 형식으로 데이터를 정형화화고 정의
- 데이터 웨어하우스에서 하나 이상의 테이블로 표시됨
테이블에서 중복 레코드 제거
- 증분 데이터 수집에서 실수로 이전 수집 시간 창과 겹치거나, 이전 실행에서 이미 수집된 일부 레코드를 선택한 경우
- 원본 시스템에서 중복 레코드가 실수로 생성된 경우
- 나중에 채워진(backfilled) 데이터가 테이블에 로드된 후속 데이터와 겹치는 경우
-> SQL 쿼리로 실행하는 것이 좋음
1. 쿼리 시퀀스 사용
CREATE TABLE distinct_orders AS
SELECT DISTINCT OrderId,
OrderStatus,
LastUpdated
FROM ORDERS;
TRUNCATE TABLE Orders;
INSERT INTO Orders
SELECT * FROM distinct_orders;
DROP TABLE distinct_orders;
- DISTINCT 문을 사용하여 원본에서 테이블의 복사본을 만들고
- 원본 테이블을 자르고
- 데이터세트의 중복 제거된 버전을 원본 테이블에 삽입
* TRUNCATE 작업 후 테이블은 다음 INSERT 작업이 완료될 때까지 비어 있으며, 이를 쿼리하는 사용자나 프로세스가 본질적으로 액세스 할 수 없음. 따라서 매우 큰 테이블의 경우 Orders 테이블을 삭제한 다음 distnct_orders 이름을 대신 Orders로 바꾸는 것을 고려해도 좋음.
2. 윈도우 기능(Window function)을 사용하여 삭제할 행과 유지할 행 식별
CREATE TABLE all_orders AS
SELECT
OrderId,
OrderStatus,
LastUpdated,
ROW_NUMBER() OVER(PARTITION BY OrderId,
OrderStatus,
LastUpdated)
AS dup_count
FROM Orders;
TRUNCATE TABLE Orders;
-- only insert non-duplicated records
INSERT INTO Orders
(OrderId, OrderStatus, LastUpdated)
SELECT
OrderId,
OrderStatus,
LastUpdated
FROM all_orders
WHERE
dup_count = 1;
DROP TABLE all_orders;
- ROW_NUMBER 함수를 사용하여 레코드의 순위 지정
- PARTITION_BY 문을 사용하여 열별로 레코드 그룹화
- 변환은 SQL 이외의 언어를 사용하여 수행하는 것이 쉽다.
- 가능한 한 초기에, 데이터를 수집하는 시점에 데이터를 수정하고 품질을 해결하는 것이 가장 좋다.
- 비즈니스 로직과 관련된 변환의 경우 데이터 수집과 별도로 변환을 분리하는 것이 가장 좋다.
이러한 유형의 변환을 데이터 모델링이라고 한다.
데이터 모델링
- 비즈니스 컨텍스트가 고려된다.
- 모델에서 측정하고 싶은 것,
보고서 또는 대시보드에서 필터링하거나 그룹화하려는 항목(속성)에 중점을 둔다. - 데이터 모델에 저장된 세부 정보 수준은 필요한 가장 작은 단위여야 한다.
- 특정 월에 특정 국가에서 발생한 주문으로 인해 발생한 수익은 얼마인가?
- 주어진 날에 얼마나 많은 주문이 접수되었는가?
와 같은 질문에 답하기 위해 쿼리를 할 수 있는 데이터 모델을 만든다고 가정해보자.
데이터 모델이 제공해야 하는 측정값은 '총 수익'과 '주문 수',
모델에서 쿼리가 데이터를 필터링하거나 그룹화할 수 있는 속성은 '주문 국가'와 '주문 날짜'이다.
증분 수집된 데이터 모델링
- 소스 데이터의 현재 상태 뿐 아니라, 수집이 시작된 이후의 이력 기록도 포함된다.
- 데이터 모델을 구축하기 전에, 테이블의 레코드에 대한 변경 사항을 처리하는 방법을 결정해야 한다.
만약 영국과 미국에서 각각 1번 주문한 사용자가 있다면, 국가마다의 주문량을 집계할 때 어떤 기준으로 할 것인가?
각 국가의 고객이 매일 생성하는 페이지 뷰 수 구하기
- 새 레코드가 추가되도 기존 레코드를 모두 유지해야 한다
- 모델을 완전히 새로고침할 경우, 런타임이 함께 증가하게 된다
- 모델을 증분으로 새로 고칠 경우, 타임스탬프 세분화 여부에 따라 레코드가 중복될 수 있으므로 주의해야 한다.
책... 만만치 않다...
'인프라,데이터' 카테고리의 다른 글
데이터 중심 애플리케이션 설계 1장 정리 (0) | 2022.05.08 |
---|---|
데이터 파이프라인 핵심 가이드 8-10 (0) | 2022.04.24 |
데이터 파이프라인 핵심 가이드 7 (0) | 2022.04.17 |
데이터 파이프라인 핵심 가이드 1-3 (0) | 2022.04.03 |
스포티파이 시니어 데엔이 말하는 주니어 개발자를 위한 커리어 로드맵 (1) | 2022.03.29 |