Great Expectations
Great Expectations
Great Expectations(GX)는 데이터를 표현형 테스트(expressive test)로 설명하고, 그 데이터가 테스트 기준을 충족하는지 검증하는 데이터 품질 프레임워크예요. 파이썬 라이브러리인 GX Core를 통해 대화형 탐색적 데이터 검증부터 프로덕션 배포에서의 자동 검증까지 다양한 워크플로를 프로그래밍 방식으로 만들 수 있어요. 그래서 데이터 파이프라인에 들어가기 전에 데이터가 기대한 품질을 갖추고 있는지 자동으로 확인하는 데 널리 쓰여요. GX는 자체 호스팅이 가능한 오픈소스 GX Core와, 관리형 SaaS인 GX Cloud로 구분해서 사용할 수 있어요.
출처: 문서
본문
GX를 왜 쓰나요?
데이터가 많아지면 데이터에 대한 암묵적인 가정(암묵적 기대)이 생겨요. 예를 들어 "특정 컬럼은 항상 1 이상 6 이하일 거야" 같은 것 말이죠. Great Expectations는 이런 가정을 **Expectation(기대)**이라는 명시적인 선언으로 바꿔요. Expectation은 파이썬 유닛 테스트의 assertion과 비슷하지만, 데이터 자체를 대상으로 하는 유연하면서 선언적인 언어예요. 이를 통해 데이터를 더 잘 이해하고, 데이터 품질을 개선할 수 있어요.
GX 워크플로의 핵심 개념
모든 GX 워크플로는 공통된 패턴을 따라요.
- GX 환경 설정 — Data Context를 만든다.
- 데이터 연결 — Data Source, Data Asset, Batch Definition을 정의한다.
- Expectation 정의 — Expectation과 Expectation Suite를 만든다.
- 검증 실행 — Validation Definition으로 검증을 돌린다.
각 단계마다 서로 다른 GX 컴포넌트(파이썬 클래스)가 사용돼요.
- Data Context — GX 워크플로를 정의하고 실행하는 파이썬 객체예요. 워크플로 컴포넌트의 설정·메타데이터·액션과 검증 결과에 대한 접근을 제공해요. 모든 GX 워크플로는 Data Context 생성으로 시작해요.
- Data Source — 데이터 저장소를 GX로 표현한 것. 데이터베이스, 스키마, 클라우드 객체 스토리지의 데이터 파일 등 다양한 유형의 데이터 저장소에 연결하는 방법을 알려줘요.
- Data Asset — Data Source 안의 레코드 모음이에요. Data Source가 관계형 데이터베이스라면, Data Asset은 그 안의 테이블(또는 테이블에 대한 select 쿼리 결과)에 해당해요.
- Batch Definition — Data Asset 안의 레코드를 어떻게 구성할지 정의해요. 런타임에 Batch(레코드 모음)를 검증용으로 가져오게 해 주고, 단일 Batch로 검증하거나 여러 Batch로 나눠 검증할 수 있어요.
- Expectation — 데이터에 대한 검증 가능한 assertion(주장)이에요. 데이터의 기대 품질을 선언적으로 기술하며, 하나의 Batch를 검증하는 데 쓸 수 있어요. Expectation Gallery에서 데이터 품질 문제와 지원되는 Data Source별로 목록을 필터링해 찾을 수 있어요.
- Expectation Suite — Expectation의 모음이에요. 여러 Expectation으로 하나의 Batch를 동시에 검증할 수 있게 해 주고, 다른 Batch에도 같은 Suite를 적용할 수 있어요.
- Validation Definition — Batch Definition 하나와 Expectation Suite 하나를 명시적으로 연결한 것. 어떤 데이터를 어떤 Expectation에 대해 검증할지 정의해요.
- Validation Result — 검증 후 GX가 돌려주는 결과로, 데이터가 기대와 얼마나 일치하는지를 알려줘요.
- Checkpoint — 프로덕션 배포에서 데이터를 검증하는 주요 수단이에요. 공유 파라미터를 가진 Validation Definition 목록을 실행하고, Actions를 실행하도록 구성해 Validation Result를 처리할 수 있어요.
- Actions — Checkpoint를 데이터 파이프라인 인프라에 통합하는 메커니즘. Validation Result를 자동으로 처리해요.
설치하기
GX Core는 파이썬 라이브러리예요. 로컬 파이썬 환경이나 EMR Spark 클러스터 같은 호스팅 환경의 노트북 스코프 라이브러리로 설치할 수 있어요.
전제 조건은 다음과 같아요.
- 파이썬 3.10 ~ 3.13
- (권장) 파이썬 가상 환경
- 인터넷 접속
- 패키지를 다운로드하고 설치할 권한
먼저 가상 환경을 만들었다면 활성화해요.
source my_venv/bin/activate
pip 최신 버전을 확인해요.
python -m ensurepip --upgrade
GX Core 라이브러리를 설치해요.
pip install great_expectations
설치가 잘 됐는지 파이썬에서 확인해요.
import great_expectations as gx
print(gx.__version__)
정상적으로 설치됐다면 설치된 GX 라이브러리의 버전 번호가 출력돼요.
Expectation 만들기 (사용 예시)
Expectation은 데이터에 대한 검증 가능한 assertion이에요. Expectation 클래스는 great_expectations.expectations 모듈에서 찾을 수 있어요. 예를 들어 ExpectColumnMaxToBeBetween Expectation을 만들 때, 모든 파라미터를 미리 정의하고 strict_min, strict_max는 기본값으로 두는 코드는 다음과 같아요.
from great_expectations import expectations as gxe
preset_expectation = gx.expectations.ExpectColumnMaxToBeBetween(
column="passenger_count", min_value=1, max_value=6, severity="warning"
)
Expectation은 생성할 때 다음 선택 파라미터도 지원해요.
- meta — Expectation과 함께 저장할 사용자 제공 메타데이터 딕셔너리. Expectation의 목적과 의도를 기록할 때 써요.
- mostly — 성공적으로 검증된 행의 비율에 기반한 퍼지(fuzzy) 검증을 위한 특수 인자. 성공 비율이 mostly 값 이상이면 Success가 true를 반환해요.
- severity — Expectation 실패의 영향도를 나타내며,
critical,warning,info중 하나를 받아요. 기본값은critical이에요. severity 수준에 따라 Actions를 트리거하거나, ExpectationSuiteValidationResult 클래스의get_maximum_severity_failure헬퍼 메서드로 데이터 파이프라인을 분기할 수 있어요. 참고로 Expectation 실행 자체가 실패하면 설정과 무관하게 항상 critical로 기록돼서, 데이터가 의도대로 테스트되지 않고 있음을 알려줘요.