본문 바로가기

인프라,데이터

데이터 파이프라인 핵심 가이드 6

 

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번 주문한 사용자가 있다면, 국가마다의 주문량을 집계할 때 어떤 기준으로 할 것인가?

 

각 국가의 고객이 매일 생성하는 페이지 뷰 수 구하기

  • 새 레코드가 추가되도 기존 레코드를 모두 유지해야 한다
  • 모델을 완전히 새로고침할 경우, 런타임이 함께 증가하게 된다
  • 모델을 증분으로 새로 고칠 경우, 타임스탬프 세분화 여부에 따라 레코드가 중복될 수 있으므로 주의해야 한다.

책... 만만치 않다...