본문 바로가기
C.W.K.
Stream
Lesson 02 of 06 · published

Great Expectations — 팀 간 데이터 테스트

~12 min · validation, great-expectations, data-contracts

Level 0구경꾼
0 XP0/47 lessons0/11 achievements
0/120 XP to next level120 XP to go0% complete

Pandera 의 무거운 사촌

Great Expectations (GX) 는 Pandera 보다 판이 큰 검증 framework 야. Pandera 가 inline 으로 불러 쓰는 라이브러리라면 GX 는 프로젝트야: config 디렉토리를 가진 persistent context, 저장하고 버전 관리하는 expectation suite, Data Docs 렌더러, Airflow/dbt/Dagster 통합까지. 무게가 나가는 대신 돌려받는 게 있어 — expectation 이 일급 산출물이 돼. Version control 에 들어가고, 사람이 읽을 수 있고, 엔지니어가 아니어도 리뷰할 수 있는 물건이 되는 거야.

Pandera 대신 GX 를 고를 때

  • 데이터 contract 가 필요할 때 — 분석가, product, business stakeholder 가 읽고 리뷰할 수 있는 version-controlled 산출물로서.
  • 자동 생성 data docs 를 원할 때 — 기대 schema, 최근 run 결과, 시간에 따른 drift 를 보여 주는 정적 사이트.
  • 이미 Airflow/Dagster 를 돌리고 있고 검증을 일급 operator/asset 으로 끼우고 싶을 때.
  • 데이터를 at rest 로 검증하고 싶을 때 — DataFrame inline 만이 아니라, Snowflake 테이블에 스케줄로 expectation 을 돌리는 것.

Pandera 로 충분할 때

파이프라인이 Python 안에 살고, 검증이 inline 에 머물고, 읽는 사람이 본인 팀뿐이라면 — Pandera 가 가벼운 정답이야. 결정 기준은 하나로 줄어: 기본은 Pandera, expectation 이 코드베이스 밖으로 나가야 하는 순간 GX.

Code

코드 안 최소 Great Expectations 검증·python
import great_expectations as gx
import great_expectations.expectations as gxe

context = gx.get_context()

# 1. Data source -> asset -> batch definition (GX 1.x 배선)
ds        = context.data_sources.add_pandas('orders_ds')
asset     = ds.add_dataframe_asset('orders')
batch_def = asset.add_batch_definition_whole_dataframe('batch')

# 2. suite 자체가 산출물 — 버전 관리하고 리뷰받는 게 이거야
suite = context.suites.add(gx.ExpectationSuite(name='orders.suite'))
suite.add_expectation(gxe.ExpectColumnValuesToNotBeNull(column='order_id'))
suite.add_expectation(gxe.ExpectColumnValuesToBeUnique(column='order_id'))
suite.add_expectation(gxe.ExpectColumnValuesToMatchRegex(
    column='order_id', regex=r'^O\d{6}$'))
suite.add_expectation(gxe.ExpectColumnValuesToBeBetween(
    column='amount_usd', min_value=0, max_value=1_000_000))
suite.add_expectation(gxe.ExpectColumnValuesToBeInSet(
    column='status', value_set=['pending', 'completed', 'cancelled']))

# 3. suite 를 데이터에 묶고 실행 — DataFrame 은 batch parameter 로 들어가
validation = context.validation_definitions.add(
    gx.ValidationDefinition(name='orders.vd', data=batch_def, suite=suite))
result = validation.run(batch_parameters={'dataframe': raw_df})

if not result.success:
    raise RuntimeError('orders 가 expectation 실패')

External links

Exercise

시간과 의욕이 있으면: 새 프로젝트에 pip install great_expectations 하고, 위 스니펫을 위반 하나를 일부러 심어 둔 작은 DataFrame 에 돌려 봐 — 중복 id 나 음수 금액 같은 거. result.successFalse 로 돌아오면 어느 expectation 이 깨졌는지 읽어 봐. 그다음 Data Docs 사이트를 만들어 브라우저로 열어. 이 연습의 목표는 Pandera 와의 무게 차이를 몸으로 느껴서, 나중에 알고 고르게 되는 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.