11주차 금요일, 55일차 Today I Learned
dbt (2)
: Seeds, Sources, Snapshots, Tests, Documentation, Expectations
데이터 카탈로그
: 기능 정의, 제품 서베이
✏️ 학습 내용
dbt
dbt를 더 유용하게 만들어주는 기능들에 대해 알아보자.
1. Seeds
많은 dimension 테이블들은 크기가 작고 많이 변하지 않는다. Seeds는 이를 파일 형태로 데이터웨어하우스로 로드하는 방법으로, 보통 csv 파일같은 작은 파일 데이터를 지칭한다. seeds 폴더 아래에 적당히 .csv 파일을 생성하면 나중에 이 파일 이름으로 테이블이 생성된다. `dbt seed` 명령어로 실행할 수 있다.
2. Sources
Staging 테이블을 만들 때 입력 테이블들이 자주 바뀐다면, models 밑의 .sql 파일들을 일일이 찾아 바꾸어주어야 할 것이다. 이러한 번거로움을 해결하기 위해 Sources를 사용한다. 입력 테이블에 별칭을 주고, 별칭을 staging 테이블에서 사용하는 두 단계로 구성된다.
기본적으로 처음 입력되는 ETL 테이블을 대상으로 하여 별칭을 제공하고, 최신 레코드 체크 기능을 제공한다. 쉽게 말하면 Sources는 RAW DATA에 별칭을 주는 것인데, 이를 통해 ETL단의 소스 테이블이 바뀌어도 뒤에 영향을 주지 않는다. 추상화를 통한 변경처리를 용이하게 해준다.
Sources 최신성 (Freshness)
특정 데이터가 소스와 비교해서 얼마나 최신성이 떨어지는지 체크하는 기능
3. Snapshots
Dimension 테이블은 성격에 따라 변경이 자주 생길 수 있으므로 히스토리가 중요해진다. dbt엔 테이블의 변화를 계속적으로 기록함으로써 과거 어느 시점이건 다시 돌아가서 테이블의 내용을 볼 수 있는 기능을 이야기한다. 이를 통해 테이블에 문제가 있을 경우 과거 데이터로 롤백 가능하고, 다양한 데이터 관련 문제 디버깅도 쉬워진다.
DBT에서 히스토리 테이블을 만들 때 사용하는 방법은 SCD Type 2이다. Dimension 테이블에서 특정 엔티티에 대한 데이터가 변경되는 경우 변경 일자도 같이 추가되어야 한다.
dbt에서 스냅샷을 처리하는 방법은 먼저 snapshots 폴더에 환경설정이 되고, snapshots을 하려면 데이터 소스가 PK가 존재하고 레코드의 변경시간을 나타내는 타임스탬프가 필요하다는 일정 조건을 만족해야 한다. 그리고 PK를 기준으로 변경시간이 현재 DW에 있는 시간보다 미래인 경우 같이 변경 감지 기준에 따라야 한다. Snapshots 테이블에는 dbt_scd_id, dbt_updated_at, valid_from, valid_to 총 4개의 타임스탬프가 존재한다.
4. Tests
데이터 품질을 테스트하는 방법으로, 내장 일반 테스트 (Generic), 커스텀 테스트 (Singular) 두 가지가 존재한다.
- 내장 일반 테스트 (Generic) :
- models 폴더 아래에 만들어진다.
- unique, not_null, accepted_values, relationships 등의 테스트를 지원한다.
- 커스텀 테스트 (Singular) :
- tests 폴더 아래에 만들어진다.
- 기본적으로 SELECT로 간단하며 결과가 리턴되면 “실패”로 간주한다.
5. Documentation
dbt 문서화는 문서와 소스 코드를 최대한 가깝게 배치하기 위함이다. 문서화 자체는 두 가지 방법이 존재하며, 이를 경량 웹서버로 서빙한다. overview.md가 기본 홈페이지가 되며, 이미지 등의 asset 추가도 가능하다. 웹서버를 통해 데이터 리니지를 볼 수도 있다.
- 기존 .yml 파일에 문서화 추가하는 방식 (선호됨)
- 독립적인 markdown 파일 생성하는 방식
6. Expectations
Great Expectations에서 영감을 받아 dbt용으로 만든 dbt 확장판으로, 설치 후에 packages.yml에 등록하여 사용 가능하다. 보통은 앞서 dbt 제공 테스트들과 같이 사용한다.
데이터 카탈로그
데이터 카탈로그는 데이터 자산의 효율적인 관리 프레임웍으로, 주요 데이터 기술 스택이다. 많은 회사들이 데이터 카탈로그를 메인 데이터 거버넌스 툴로 사용한다. 중요한 기능은 거의 자동화된 메타 데이터를 수집하고, 데이터를 보안하는 것이다. 보통 메타 데이터만 읽어오므로 보안적이다. 다양한 관점에서 데이터를 조직적으로 관리할 수 있다.
- 데이터 자산 메타 정보 중앙 저장소
- 데이터 자산의 종류 : 테이블 (데이터베이스), 대시보드, 문서/메세지, ML 피쳐, 데이터 파이프라인, 사용자 (HR 시스템)
- 데이터 거버넌스의 첫 걸음
데이터 카탈로그 주요 기능은 주요 데이터 플랫폼 지원, 비지니스 용어집, 주석/문서/태그 등 협업 기능, 데이터 리니지, 데이터 모니터링/감사/트레이싱, 강력한 검색 기능, 데이터 추천 기능, 데이터 유저 페르소나 등이다. DW & DL, BI Tools, ELT, ETL, NoSQL 등 주요 데이터 플랫폼도 지원한다.
DBT 코드 = SQL + Jinja Template = Template화 된 SQL
데이터 거버넌스 관점에서 데이터 카탈로그는 중요하다. 갖고 있는 데이터 자산에 대한 통합 뷰를 제공하고, 생산성을 증대하며, 위험 및 인프라 비용을 감소한다. 데이터 티켓도 감소되고, 데이터 변경으로 인한 이슈도 감소된다.
데이터 카탈로그 이후 자동화된 데이터 거버넌스 관련 웍플로우를 추가하면 된다. 일단 시작으로 품질 관련 경보 시스템을 구현하고 데이터 관련 지표 리뷰 미팅을 운영한다.
데이터 카탈로그 제품
- Atan : 협업 관련 여러 서비스들과의 연동에 초점된 Modern data workspace
- DataHub : 많은 기능이 존재하나 엔지니어 없이는 운영 불가능
- Microsoft Azure Purview Data Catalog : Purview Data Map이란 메타데이터 관리 서비스 위에서 동작
💡 배운 점
- dbt의 seeds, sources, snapshots, tests에 대해서 배웠다.
- Sources 최신성 (Greshness) 기능에 대해 배웠다.
- dbt documentation, expectations에 대해 배웠다.
- 데이터 카탈로그의 기능에 대해 배웠다.
- 데이터 카탈로그 제품에 대해 알아보고, 실제 서베이 결과를 살펴보았다.
- 메타데이터란?
📝 남아있는 의문과 개선점
- Expectations
- 데이터 카탈로그 개념, 필요성, 활용방안 등
☁️ 소감
dbt를 짧은 시간에 배웠다. 데이터 카탈로그도 잠깐 훑어보는 정도로 배웠다. 중요한 내용인데 하루만에 배우기는 무리가 있다. 실제로 한 번씩 사용해보고 싶다.
이제까지 전체적으로 배운 내용을 한 번씩 훑어보면서 모르는 부분들을 채워나가면 데이터 엔지니어에 대한 기본적인 이해가 탄탄해질 것 같아 기대된다.